afx_msg void CMainWin::OnCommand_Risov()
{
m_pGraphWnd=new CGraphWin(this);
m_pGraphWnd->ShowWindow(SW_SHOWNORMAL);
m_pGraphWnd->UpdateWindow();
}
Модальные окна Overlapped
Я хочу, чтобы из меню окна CMainWin можно было бы показать окно класса CGraphWin (это также потомок CFrameWin как WS_OVERLAPPEDWINDOW), причем показать так, чтобы нельзя было переключиться на окно
CMainWin, не закрыв экземпляр CGraphWin.
не нашел, как это можно сделать. Кто-нибудь подскажет?
в главном окне CMainWin (это потомок CFrameWnd, содержащий член m_pGraphWnd типа CWnd*)
пишу обработчик нажатия на кнопку "Рисовать".
Код:
Т.е. создаю экземпляр класса CGraphWin (это потомок CFrameWnd, имеющий свое меню и член pWnd типа CWnd* ) и показываю его на экране
Код:
CGraphWin::CGraphWin(CWnd *pWnd_)
{
pWnd=pWnd_;
this->Create(0, "Ãðàôèê", WS_OVERLAPPEDWINDOW, rectDefault, pWnd,"GRAPHMENU");
}
{
pWnd=pWnd_;
this->Create(0, "Ãðàôèê", WS_OVERLAPPEDWINDOW, rectDefault, pWnd,"GRAPHMENU");
}
Окно нормально отобразится, но как сделать CGraphWin модальным, чтобы нельзя было переключиться на CMainWin, не закрыв CGraphWin?
Может кто-нибудь работал с BeginModalState()? Вроде эта функция делает окно модальным, только где и для какого окна ее вызывать?
Код:
CGraphWin::CGraphWin(CWnd *pWnd_)
{
// Создание окна с заголовком
pWnd=pWnd_;
pWnd->BeginModalState();
this->Create(0, "График", WS_OVERLAPPEDWINDOW, rectDefault, pWnd,"GRAPHMENU");
}
CGraphWin::~CGraphWin()
{
pWnd->EndModalState();
pWnd->SetActiveWindow();
}
{
// Создание окна с заголовком
pWnd=pWnd_;
pWnd->BeginModalState();
this->Create(0, "График", WS_OVERLAPPEDWINDOW, rectDefault, pWnd,"GRAPHMENU");
}
CGraphWin::~CGraphWin()
{
pWnd->EndModalState();
pWnd->SetActiveWindow();
}
Т.е. из главного окна для создания экземпляра CGraphWin использую следующий код:
Код:
m_pGraphWnd=new CGraphWin(this);
m_pGraphWnd->ShowWindow(SW_SHOWNORMAL);
m_pGraphWnd->UpdateWindow();
m_pGraphWnd->ShowWindow(SW_SHOWNORMAL);
m_pGraphWnd->UpdateWindow();
Все ли здесь правильно, вроде этот код работает и выполняет то, что нужно, но нелогично получается...
Вызов BeginModalState выполняется для родительского окна (не для окна, которое нужно сделать модальным).