Есть SDI приложение. Нужно создать диалог который будет иметь урезанную функциональность основного приложения.
Т.е. при запуске приложения в зависимости от некотрого значения будет осуществляться загрузка или SDI варианта приложения или Dialog-based. Так же нужно осуществить переключение между ними.
В какую сторону копать чтобы подружить 2 вида приложения и сделать переключение между ними???
Здравствуйте Snoop, Вы писали:
S>Доброго времени суток!
S>Есть SDI приложение. Нужно создать диалог который будет иметь урезанную функциональность основного приложения. S>Т.е. при запуске приложения в зависимости от некотрого значения будет осуществляться загрузка или SDI варианта приложения или Dialog-based. Так же нужно осуществить переключение между ними.
S>В какую сторону копать чтобы подружить 2 вида приложения и сделать переключение между ними???
Делай выбор в InitInstance (посмотри как она сделана для SDI и Dialog-Based)
O$>>Делай выбор в InitInstance (посмотри как она сделана для SDI и Dialog-Based)
S>Спасибо, но это при старте. А как переключится в процессе работы?
Пример из МСДН
Переключение View
void CMainFrame::OnExample(UINT nCmdID) // Обработчик нажатия кнопок переключающих вьювы
{
if (nCmdID == m_nCurrentExample)
return; // already selected
// Set the child window ID of the active view to AFX_IDW_PANE_FIRST.
// This is necessary so that CFrameWnd::RecalcLayout will allocate
// this "first pane" to that portion of the frame window's client
// area not allocated to control bars. Set the child ID of
// the previously active view to some other ID; we will use the
// command ID as the child ID.
CView* pOldActiveView = GetActiveView();
::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, m_nCurrentExample);
CRuntimeClass* pNewViewClass;
switch (nCmdID)
{
case ID_STRINGLIST:
pNewViewClass = RUNTIME_CLASS(CStringListView);
break;
case ID_TYPEDLIST:
pNewViewClass = RUNTIME_CLASS(CTypedPtrListView);
break;
case ID_INTLIST:
pNewViewClass = RUNTIME_CLASS(CIntListView);
break;
default:
ASSERT(0);
return;
}
// create the new view
CCreateContext context;
context.m_pNewViewClass = pNewViewClass;
context.m_pCurrentDoc = GetActiveDocument();
CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
if (pNewView != NULL)
{
// the new view is there, but invisible and not active...
pNewView->ShowWindow(SW_SHOW);
pNewView->OnInitialUpdate();
SetActiveView(pNewView);
RecalcLayout();
m_nCurrentExample = nCmdID;
// finally destroy the old view...
pOldActiveView->DestroyWindow();
}
}
Здравствуйте Snoop, Вы писали:
S>Есть SDI приложение. Нужно создать диалог который будет иметь урезанную функциональность основного приложения. S>Т.е. при запуске приложения в зависимости от некотрого значения будет осуществляться загрузка или SDI варианта приложения или Dialog-based. Так же нужно осуществить переключение между ними.
Сложность в том, что классическое dialog-based приложение не поддерживает Document/View.
А переключаться на диалог просто — создаешь немодальный диалог, а SDI прячешь.
Здравствуйте Snoop, Вы писали:
S>Доброго времени суток!
S>Есть SDI приложение. Нужно создать диалог который будет иметь урезанную функциональность основного приложения. S>Т.е. при запуске приложения в зависимости от некотрого значения будет осуществляться загрузка или SDI варианта приложения или Dialog-based. Так же нужно осуществить переключение между ними.
S>В какую сторону копать чтобы подружить 2 вида приложения и сделать переключение между ними???
Вот по этой ссылке лежит как раз то, что тебе нужно. Код довольно прочтой, разберешься. www.firststeps.ru/mfc/sample/2.html Удачи!
Вопрос исчерпан. У меня в SDI приложении уже был реализован класс для переключения нескольких видов по вышеприведенной схеме.
Вот отдохнул денек и все разложилось в голове по полочкам.
Еще раз спасибо всем за ценные мысли !