Продолжаем развитие нашего проекта. В файле ресурсов необходимо создать диалоговую панель. Для этого перейдите на вкладку Resource и Меню Insert, далее New Resource и из списка выберите "диалоговая панель".
Возьмем реакцию на двойной щелчок правой кнопкой мыши. И изменим процедуру реакции.
void CMainWnd::OnRButtonDblClk(UINT, CPoint) { CDialog about(IDD_DIALOG1); // создаем объект класса диалогового окна if (about.DoModal()==IDOK ) AfxMessageBox("Ok"); // пользователь выбрал OK else AfxMessageBox("Cancel"); // пользователь выбрал Canсel }
Для работы с диалоговыми панелями в MFC есть класс CDialog. Этот класс необходим для создания модального и немодального диалогового окна.
На данный момент эти понятия нужно рассматривать как зависимое и независимое. То есть вывод модального окна на экран блокирует обращения к другим элементам приложения - меню, окна, кнопки и т.д. Немодальное окно позволяет обращаться к окну программы. Ниже на рисунке немодальное диалоговое окно поиска в MS Word.
И модальное окно в той же программе:
Мы создали свой статический класс CDialog. Он будет существовать только когда существует процедура. Вообще это понятие области видимости переменной. Если она объявлена на уровне процедуры, то живет только пока выполняется процедура. Правило, что после скобки { началось, то на скобке } и закончится. С мечом пришедши, от него погибнешь и т.п.
В параметр мы указали идентификатор окна из ресурса. По этому идентификатору и будет получена копия окна. Внимание - класс CDialog создает окно на основе ресурсов, беря идентификатор и строя по нему окно.
Функция DoModal() выводит окно в модальном режиме, то есть, блокируя главное окно программы. Она возвращает результат - код нажатой клавиши. Вот его мы и обрабатываем. По русски там написано так - Если в результате запуска окна нажата клавиша ОК, выведи сообщение ОК, иначе выведи сообщение Cancel.
Компилируем, запускаем, по двойному щелчку окно есть. Вы чувствуете, как растет наша компьютерная мускулатура?
CDialog about(IDD_DIALOG1);
about.DoModal();Или с обработкой
if (about.DoModal()==IDOK )