Немодальный диалог Диалоговое окно не является дочерним по отношению к окну, из которого оно создано. Но окно-создатель является собственником диалога. По известному дескриптору диалога hDlg можно получить дескриптор владельца функцией GetParent(hDlg). Напомним, что эта же функция используется для получения родительского окна по дескриптору дочернего.

При первом знакомстве с дочерними окнами у многих возникает вопрос, нужен ли окну числовой идентификатор, если оно однозначно определяется дескриптором HWND? Я думаю, основная причина заключается в том, что значение идентификатора задает программист, а значение дескриптора окна дает операционная система и оно может изменяться в зависимости от ситуации в системе. На примере диалоговых окон можно увидеть, как идентификатор позволяет полностью изолировать приложение от дочернего окна. Для размещенных в диалоге графических элементов управления программист не пишет явно операторов открытия окна и все взаимодействие основано на обмене сообщениями.

Немодальный диалог При использовании одного шаблона модальный и немодальный диалоги можно реализовать общей оконной функцией, но такая функция должна учитывать различия в организации завершения модального и немодального диалогов. В проекте Два_Диалога по щелчку левой кнопкой мыши оконная процедура запускается как модальный диалог с дескриптором DlgMod:

D1alogBoxParamCGetModuleHandle(NULL).
MAKE INTRESOURCE(DIALOGMIN).hWnd.(DLGPROC) DialogMin,17);

По щелчку правой кнопкой вызывается немодальный диалог с дескриптором DlgWin:

DlgWin - CreateDialog(GetModuleHandle(NULL).
MAKEINTRESOURCE(DIALOGMIN),hWnd.(DLGPROC) Di a1ogMi n);

Диалоговая процедура Dialog реализована в файле Dialog.срр проекта, как показано в листинге 7.4.

Листинг 7.4

#include <windows.h> #include "resource.h"

HWND DlgWin; //Дескриптор немодального диалогового окна.

HWND DlgMod: //Дескриптор модального диалогового окна.

HWND ButtonWnd; //Дескриптор кнопки в окне диалога.

BOOL Dialog (HWND hDlg, UINT message. WPARAM wParam. LPARAM lParam)

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