Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Модальные окна Overlapped

284
20 сентября 2005 года
michael_is_98
587 / / 25.02.2005
У меня следующий вопрос: есть окно CMainWin - это потомок CFrameWnd, в конструкторе которого оно создается через Create как WS_OVERLAPPEDWINDOW.
Я хочу, чтобы из меню окна CMainWin можно было бы показать окно класса CGraphWin (это также потомок CFrameWin как WS_OVERLAPPEDWINDOW), причем показать так, чтобы нельзя было переключиться на окно
CMainWin, не закрыв экземпляр CGraphWin.
не нашел, как это можно сделать. Кто-нибудь подскажет?
284
21 сентября 2005 года
michael_is_98
587 / / 25.02.2005
Могу привести пример кода:
в главном окне CMainWin (это потомок CFrameWnd, содержащий член m_pGraphWnd типа CWnd*)
пишу обработчик нажатия на кнопку "Рисовать".

 
Код:
afx_msg void CMainWin::OnCommand_Risov()
{
    m_pGraphWnd=new CGraphWin(this);
    m_pGraphWnd->ShowWindow(SW_SHOWNORMAL);
    m_pGraphWnd->UpdateWindow();
}


Т.е. создаю экземпляр класса CGraphWin (это потомок CFrameWnd, имеющий свое меню и член pWnd типа CWnd* ) и показываю его на экране

 
Код:
CGraphWin::CGraphWin(CWnd *pWnd_)
{
    pWnd=pWnd_;
    this->Create(0, "Ãðàôèê", WS_OVERLAPPEDWINDOW, rectDefault, pWnd,"GRAPHMENU");
}


Окно нормально отобразится, но как сделать CGraphWin модальным, чтобы нельзя было переключиться на CMainWin, не закрыв CGraphWin?
Может кто-нибудь работал с BeginModalState()? Вроде эта функция делает окно модальным, только где и для какого окна ее вызывать?
284
02 октября 2005 года
michael_is_98
587 / / 25.02.2005
При создании экземпляра окна CGraphWin (наследника CFrameWnd) я делаю его модальным таким кодом:
Код:
CGraphWin::CGraphWin(CWnd *pWnd_)
{
    // Создание окна с заголовком
    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();


Все ли здесь правильно, вроде этот код работает и выполняет то, что нужно, но нелогично получается...
Вызов BeginModalState выполняется для родительского окна (не для окна, которое нужно сделать модальным).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог