Win32 API. Справочник по диалоговому окну
Страница 8. Функция DialogBoxIndirect


Функция DialogBoxIndirect

(КосвенныйБлокДиалога)

Макрокоманда DialogBoxIndirect создает модальное диалоговое окно из шаблона блока диалога в памяти. Функция DialogBoxIndirect не возвращает управление до тех пор, пока заданная функция повторного вызова не закончит работу модального диалогового окна путем вызова функции EndDialog. Макрокоманда DialogBoxIndirect использует функцию DialogBoxIndirectParam.

Синтаксис

int DialogBoxIndirect
(
HINSTANCE hInstance,// дескриптор экземпляра программы
LPDLGTEMPLATE lpTemplate,// идентифицирует шаблон блока диалога
HWND hWndParent,// дескриптор окна владельца
DLGPROC lpDialogFunc // указатель на процедуру диалогового окна
);

Параметры
hInstance
Идентифицирует экземпляр модуля, который создает блок диалога.
lpTemplate
Указатель на объект глобальной памяти, содержащий шаблон, который DialogBoxIndirect использует, чтобы создать диалоговое окно. Шаблон диалогового окна состоит из заголовка, который описывает блок диалога, сопровождаемого одним или несколькими дополнительными блоками данных, которые описывают каждый элемент управления в диалоговом окне. Шаблон может использовать или стандартный или расширенный формат.
В стандартном шаблоне диалогового окна, заголовок является структурой DLGTEMPLATE, сопровождаемой дополнительными массивами переменной длины. Данные для каждого элемента управления состоят из структуры DLGITEMTEMPLATE, сопровождаемой дополнительным массивом переменой длины.
В расширенном шаблоне диалогового окна заголовок использует формат DLGTEMPLATEEX, а определения элемента управления используют формат DLGITEMTEMPLATEEX.
hWndParent
Идентифицирует окно, которое владеет блоком диалога.
lpDialogFunc
Указатель на процедуру диалогового окна. За большей информацией о процедуре блока диалога обратитесь к статье DialogProc

Возвращаемые значения
Если функция завершает свою работу успешно, возвращаемым значением является параметр nResult, определяемый при вызове функции EndDialog, которая использовалась для завершения работы диалогового окна.
Если функция потерпела неудачу, возвращаемым значением является – (минус) 1.

Замечания
Макрокоманда DialogBoxIndirect для создания диалогового окна использует функцию CreateWindowEx. Затем DialogBoxIndirect отправляет сообщение WM_INITDIALOG в процедуру диалогового окна. Если шаблон определяет стиль DS_SETFONT, функция, к тому же, в процедуру диалогового окна передает и сообщение WM_SETFON. Функция показывает на экране диалоговое окно (независимо от того, определяет ли шаблон стиль WS_VISIBLE), блокирует окно владельца и запускает свой собственный цикл сообщений для извлечения и распределения сообщений для диалогового окна.
Когда процедура диалогового окна вызывает функцию EndDialog, DialogBoxIndirect разрушает блок диалога, заканчивает цикл сообщений, разрешает работу окну владельцу (если прежде это было разрешено) и возвращает параметр nResult, определяемый при помощи процедуры диалогового окна, когда она вызвала EndDialog.
В стандартном шаблоне диалогового окна структура DLGTEMPLATE и каждая из структур DLGITEMTEMPLATE, должны быть выровнены по границам ДВОЙНОГО СЛОВА (DWORD). Массив данных создания, который следует за структурой DLGITEMTEMPLATE, должен также быть выровнен по границе ДВОЙНОГО СЛОВА (DWORD).Все другие массивы переменной длины в шаблоне должны быть выровнены по границам СЛОВА (WORD).
В расширенном шаблоне диалогового окна, заголовок DLGTEMPLATEEX и каждое определение DLGITEMTEMPLATEEX органа управления должны быть выровнены по границам ДВОЙНОГО СЛОВА (DWORD). Все другие массивы переменной длины в шаблоне должны быть выровнены по границам СЛОВА (WORD).
Все символьные строки в шаблоне диалогового окна, такие как названия блока диалога и кнопок, должны быть строками Unicode. Чтобы создать код, который работает и в Windows NT и Windows 95, используйте функцию MultiByteToWideChar, чтобы создать эти строки Unicode.

Windows 95: Система может поддерживать максимум 16,364 дескрипторов окна.

Смотри также
CreateWindowEx, DialogBox, DialogBoxIndirectParam, DialogBoxParam, DialogProc, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATE, DLGTEMPLATEEX, EndDialog, MultiByteToWideChar, WM_INITDIALOG, WM_SETFONT

Размещение и совместимость DialogBoxIndirect

Windows NTДа 
Win95Да
Win32sДа
Импортируемая библиотекаuser32.lib
Заголовочный файлwinuser.h
UnicodeWinNT
Замечания по платформеНе имеется

 
« Предыдущая статья   Следующая статья »