Функция DialogBoxIndirect 


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

Синтаксис

INT_PTR DialogBoxIndirect(
    HINSTANCE hInstance,
    LPCDLGTEMPLATE lpTemplate,
    HWND hWndParent,
    DLGPROC lpDialogFunc
);

Параметры

hInstance

[in] Дескриптор модуля, который создает диалоговое окно.

lpTemplate

[in] Указатель на объект глобальной памяти, содержащий шаблон, который DialogBoxIndirect использует, чтобы создать диалоговое окно. Шаблон диалогового окна состоит из заголовка, который описывает блок диалога, сопровождаемый одним или несколькими дополнительными блоками данных, которые характеризуют каждый орган управления в диалоговом окне. Шаблон может использовать или стандартный или дополнительный формат.

В стандартном шаблоне диалогового окна, заголовок - это структура DLGTEMPLATE, сопровождаемая дополнительными массивами переменной длины. Данные для каждого органа управления состоят из структуры DLGITEMTEMPLATE, сопровождаемой дополнительными массивами переменной длины.

В дополнительном шаблоне диалогового окна, заголовок использует формат DLGTEMPLATEEX, а определения органа управления используют формат DLGITEMTEMPLATEEX.

hWndParent

[in] Дескриптор окна, который владеет диалоговым окном.

lpDialogFunc

[in] Указатель на процедуру диалогового окна. Дополнительную информацию о процедуре диалогового окна, см. в описании DialogProc.

Возвращаемое значение

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

Если функция завершается ошибкой, потому что параметр hWndParent недопустим, возвращаемое значение равняется нулю. Функцией возвращает нуль в этой ситуации для совместимости с предыдущими версиями Microsoft ® Windows ®. Если функция завершается ошибкой по любой другой причине, возвращаемое значение равно - (минус)1. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Замечания

Макрокоманда DialogBoxIndirect использует функцию CreateWindowEx, чтобы создать диалоговое окно. Затем DialogBoxIndirect отправляет сообщение WM_INITDIALOG  в процедуру диалогового окна. Если шаблон определяет стиль DS_SETFONT или DS_SHELLFONT, функция отправляет также в процедуру блока диалога и  сообщение WM_SETFONT. Функция показывает на экране диалоговое окно (независимо от того, определяет ли шаблон стиль WS_VISIBLE), блокирует окно владельца, и начинает свой собственный цикл обработки сообщений, чтобы извлекать и распределять сообщения для диалогового окна.

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

В шаблоне стандартного диалогового окна, структура DLGTEMPLATE и каждая из структур DLGITEMTEMPLATE должны выравниваться по границам двойного слова (DWORD). Создаваемый массив данных, который следует за структурой DLGITEMTEMPLATE, должен также выравниваться по границе двойного слова (DWORD). Все остальные массивы переменной длины в шаблоне должны выравниваться по границам слова (WORD).

Все строки символов в шаблоне диалогового окна, такие как заголовки для диалогового окна и кнопок, должны быть символьными строками Unicode. Чтобы создать код, который работает и в среде Windows 95/98/Me и в среде Windows NT/2000/XP, используйте функцию MultiByteToWideChar, чтобы генерировать эти символьные строки Unicode.

Windows 95/98/Me: Система может поддерживать максимум 255 органов управления в шаблоне диалогового окна. Чтобы разместить больше чем 255 элементов управления в диалоговом окне, создавайте органы управления в обработчике сообщения  WM_INITDIALOG, а не помещайте их в шаблон.

Пример

Пример, см. в статье Создание шаблона в памяти.

Смотри также 

Обзор Диалоговые окнаФункции, используемые диалоговыми окнами CreateWindowEx,   DialogBox  DialogBoxIndirectParam DialogBoxParam, DialogProc, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATE , DLGTEMPLATEEX, EndDialog, MultiByteToWideChar, WM_INITDIALOG, WM_SETFONT 

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

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

User32.lib

Заголовочный файл

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz