Функции для создания диалоговой панели
В программном интерфейсе Windows определены восемь функций, предназначенных для создания модальных и немодальных диалоговых панелей.
Для создания модальной диалоговой панели чаще всего используется функция DialogBox:
int WINAPI DialogBox( HINSTANCE hInstance, LPCSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc);
Через параметр hInstance необходимо передать идентификатор текущей копии приложения.
Параметр lpszTemplate представляет собой указатель на строку имени шаблона, указанном в операторе DIALOG текстового описания шаблона.
Параметр hwndOwner - идентификатор окна, создавшего диалоговую панель.
Последний параметр, dlgprc, представляет собой адрес функции диалога.
Если при создании диалоговой панели ей необходимо передать параметр, воспользуйтесь функцией DialogBoxParam:
int WINAPI DialogBoxParam( HINSTANCE hInstance, LPCSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM lParamInit);
Эта функция полностью аналогична функции DialogBox, за исключением дополнительного параметра lParamInit. Значение этого параметра передается через параметр lParam сообщения WM_INITDIALOG и может быть проанализировано на этапе создания диалоговой панели.
Как мы уже говорили, существует редко используемая возможность создания диалоговой панели с помощью шаблона, сформированного непосредственно в памяти (а не загруженного из ресурсов приложения). Для создания таких диалоговых панелей предназначены функции DialogBoxIndirect и DialogBoxIndirectParam.
Функция DialogBoxIndirect аналогична функции DialogBox, но в качестве второго параметра в ней используется не указатель на строку имени шаблона, а идентификатор глобального блока памяти, в котором подготовлен шаблон:
int WINAPI DialogBoxIndirect( HINSTANCE hInstance, HGLOBAL hglbDlgTemplate, HWND hwndOwner, DLGPROC dlgprc);
Функция DialogBoxIndirectParam аналогична функции DialogBoxIndirect, но имеет дополнительный параметр lParamInit:
int WINAPI DialogBoxIndirectParam( HINSTANCE hInstance, HGLOBAL hglbDlgTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM lParamInit);
Для создания немодальных диалоговых панелей используются функции CreateDialog, CreateDialogParam, CreateDialogIndirect, CreateDialogIndirectParam. Эти функции имеют параметры, аналогичные параметрам функций DialogBox, DialogBoxParam, DialogBoxParamIndirect:
HWND WINAPI CreateDialog(HINSTANCE hInstance, LPCSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc);
HWND WINAPI CreateDialogParam(HINSTANCE hInstance, LPCSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM lParamInit);
HWND WINAPI CreateDialogIndirect(HINSTANCE hInstance, HGLOBAL hglbDlgTemplate, HWND hwndOwner, DLGPROC dlgprc);
HWND WINAPI CreateDialogIndirectParam( HINSTANCE hInstance, HGLOBAL hglbDlgTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM lParamInit);
Функции DialogBox, DialogBoxParam, DialogBoxIndirect, и DialogBoxIndirectParam возвращают значение, передаваемое при завершении работы диалоговой панели с помощью функции EndDialog.
Функция EndDialog имеет следующий прототип:
void WINAPI EndDialog(HWND hdlg, int nResult);
В качестве первого параметра функции необходимо указать идентификатор завершаемой диалоговой панели, который передается в функцию диалога через параметр hdlg.
Функции CreateDialog, CreateDialogParam, CreateDialogIndirect, и CreateDialogIndirectParam возвращают идентификатор окна для созданной диалоговой панели.