Поделиться через


Макрос DialogBoxIndirectA (winuser.h)

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

DialogBoxIndirect реализуется как вызов функции DialogBoxIndirectParam.

Синтаксис

void DialogBoxIndirectA(
  [in, optional]  hInstance,
  [in]            lpTemplate,
  [in, optional]  hWndParent,
  [in, optional]  lpDialogFunc
);

Параметры

[in, optional] hInstance

Тип: HINSTANCE

Дескриптор модуля, создающего диалоговое окно.

[in] lpTemplate

Тип: LPCDLGTEMPLATE

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

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

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

[in, optional] hWndParent

Тип: HWND

Дескриптор окна, которому принадлежит диалоговое окно.

[in, optional] lpDialogFunc

Тип: DLGPROC

Указатель на процедуру диалогового окна. Дополнительные сведения о процедуре диалогового окна см. в разделе DialogProc.

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

Никакой

Замечания

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

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

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

В шаблоне расширенного диалогового окна заголовок DLGTEMPLATEEX и каждая из определений элементов управления DLGITEMTEMPLATEEX должна быть выровнена по границам DWORD. Массив данных создания, если таковой имеется, который следует структуре DLGITEMTEMPLATEEX, также должен быть выровнен по границе DWORD. Все остальные массивы переменной длины в шаблоне должны быть выровнены по границам WORD.

Все строки символов в шаблоне диалогового окна, такие как заголовки диалогового окна и кнопки, должны быть строками Юникода. Используйте функцию MultiByteToWideChar для создания строк Юникода из строк ANSI.

Примеры

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

Заметка

Заголовок winuser.h определяет DialogBoxIndirect как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winuser.h (включая Windows.h)
библиотеки User32.lib
DLL User32.dll

См. также

концептуальные

CreateWindowEx

DLGITEMTEMPLATE

DLGITEMTEMPLATEEX

DLGTEMPLATE

DLGTEMPLATEEX

диалоговое окно

DialogBox

DialogBoxIndirectParam

DialogBoxParam

DialogProc

EndDialog

MultiByteToWideChar

другие ресурсы

Справочник

WM_INITDIALOG

WM_SETFONT