Для создания немодального диалога тоже есть макрос и функция, которые имеют те же параметры, но возвращают дескриптор DlgWi п диалогового окна:

HWND DlgWin - CreateDialog(GetModuleHandle(NULL). MAKEINTRESOURCE(DIALOGMIN). hWnd.(DLGPROC) DialogMin):

При вызове этой функции на экране появится немодальное диалоговое окно. При завершении немодального диалога окно следует уничтожать вызовом функции DestroyWindowO.

Простейший модальный диалог Из оконной процедуры приложения модальное диалоговое окно можно вызвать в ответ на щелчок левой кнопкой мыши, как это показано в листинге 7.2.

Листинг 7.2

case WM_LBUTT0ND0WN:
DialogBox (GetModuleHandle(NULL).
MAKEINTRESOURCE(DIALOGMIN). hWnd. (DLGPROC) DialogMin):
return 0:

Оконная функция диалога, которая в дальнейшем изложении будет называться диалоговой процедурой, похожа на оконную функцию основного окна. Но есть и несколько отличий. Перед отображением диалога в диалоговую процедуру поступит сообщение WM_INITDIALOG. Диалоговая процедура не выполняет явного вызова обработки сообщений по умолчанию DefWindowProc(), но неявно такая обработка выполняется и использует значение, возвращаемое диалоговой процедурой. Если диалоговая процедура возвращает значение fal se, то дополнительная обработка производится. Некоторые источники выделяют особое положение сообщения WM_INITDIALOG, указывая, что для него дополнительная обработка включается возвратом значения true.

Следует помнить, что размещенные в диалоге графические элементы управления являются дочерними окнами, а потому диалоговая процедура извещается о событиях в этих окнах сообщениями WM_COMMAND.

Для открытия окна в системе уже должен быть зарегистрирован соответствующий оконный класс. Оконные классы органов управления, унаследованных от Windows 3.1, система регистрирует автоматически. Для новых элементов следует включить в функцию Ini tApp() вызов InitCommonControl s(), который произведет регистрацию классов, а в список компонуемых библиотек добавить comctl32.lib.

Текст оконной функции диалога, изображенного на рис. 7.1 находится в файле DialogMin.срр проекта DlgMin и приведен в листинге 7.3.


⇐ Предыдущая| |Следующая ⇒