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 會終結對話框、結束訊息迴圈、如果先前啟用) ,則會啟用擁有者視窗 (,並在呼叫 EndDialog 時傳回對話框程式指定的 nResult 參數。
在標準對話框範本中, DLGTEMPLATE 結構和每個 DLGITEMTEMPLATE 結構都必須在 DWORD 界限上對齊。 在 DLGITEMTEMPLATE 結構後面的建立數據陣列也必須對齊 DWORD 界限。 範本中的所有其他可變長度陣列都必須在 WORD 界限上對齊。
在擴充的對話框範本中, DLGTEMPLATEEX 標頭和每個 DLGITEMTEMPLATEEX 控件定義都必須在 DWORD 界限上對齊。 建立數據陣列,如果有的話, 在 DLGITEMTEMPLATEEX 結構之後也必須對齊 DWORD 界限。 範本中的所有其他可變長度陣列都必須在 WORD 界限上對齊。
對話框範本中的所有字元字串,例如對話框和按鈕的標題,都必須是 Unicode 字串。 使用 MultiByteToWideChar 函 式從 ANSI 字串產生 Unicode 字串。
範例
如需範例,請參閱 在記憶體中建立範本。
注意
winuser.h 標頭會將 DialogBoxIndirect 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包含 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
另請參閱
概念
其他資源
參考