Немодальный диалог создается функцией Create(). Создаем тестовое приложение, как SDI и именем TestDlgs. Создаем пункт меню в View с именем Dialog и идентификатором ID_DIALOG. К этому пункту меню привязываем команду.
///////////////////////////////////////// // CTestDlgsView message handlers void CTestDlgsView::OnDialog() { }
Теперь нужно создать диалог в ресурсах. Просто добавляем и все. Идентификатор у меня IDD_DIALOG1. Для того, чтобы диалог существовал нужно, чтобы существовал его объект. Для этого мы с Вами опишем переменную класса диалога в виде.
class CTestDlgsView : public CView { protected: // create from serialization only CTestDlgsView(); DECLARE_DYNCREATE(CTestDlgsView) // Attributes public: CTestDlgsDoc* GetDocument(); CDialog dlg; // Operations ...... }
Создаем диалоговую панель при инициализации:
void CTestDlgsView::OnInitialUpdate() { CView::OnInitialUpdate(); dlg.Create(IDD_DIALOG1,this); }
Ну, и реализацию функции для показа и скрытия:
void CTestDlgsView::OnDialog() { if (dlg.IsWindowVisible()) dlg.ShowWindow(SW_HIDE); else dlg.ShowWindow(SW_SHOW); }
Посмотрим, как это работает. Диалог будет на экране и при этом не будет мешать работать с программой.
Обратите внимание, что диалог серый, то есть неактивный. Диалог может динамически создаваться и удаляться, а не скрываться. Кнопочка также может появляться и исчезать. Можно ввести пункт меню, который будет показывать есть ли на экране диалог или нет. Все можно. Только задача наша была создать немодальный диалог и мы ее решили. Чем хорош это диалог ??? Тем, что его можно утащить за окно программы, например.