共用方式為


CreateDialogIndirectA 宏 (winuser.h)

從記憶體中的對話框範本建立無模式對話框。 CreateDialogIndirect 宏會使用 CreateDialogIndirectParam 函式。

語法

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

參數

[in, optional] hInstance

類型: HINSTANCE

建立對話框之模組的句柄。

[in] lpTemplate

類型: LPCDLGTEMPLATE

CreateDialogIndirect 用來建立對話框的範本。 對話框範本是由描述對話框的標頭所組成,後面接著一或多個描述對話框中每個控件的其他數據區塊。 範本可以使用標準格式或擴充格式。

在標準範本中,標頭是 DLGTEMPLATE 結構,後面接著額外的可變長度數位。 每個控件的數據都包含 DLGITEMTEMPLATE 結構,後面接著額外的可變長度數位。

在擴充對話框範本中,標頭會使用 DLGTEMPLATEEX 格式,而控件定義則使用 DLGITEMTEMPLATEEX 格式。

CreateDialogIndirect 傳回之後,您可以釋出範本,它只會用來開始對話方塊。

[in, optional] hWndParent

類型: HWND

擁有對話框之視窗的句柄。

[in, optional] lpDialogFunc

類型: DLGPROC

對話框程式的指標。 如需對話框程式的詳細資訊,請參閱 DialogProc

傳回值

備註

CreateDialogIndirect 宏會使用 CreateWindowEx 函式來建立對話方塊。 CreateDialogIndirect 接著會將 WM_INITDIALOG 訊息傳送至對話框程式。 如果範本指定 DS_SETFONT 或DS_SHELLFONT樣式,函式也會將 WM_SETFONT 訊息傳送至對話框程式。 如果範本指定WS_VISIBLE樣式,函式會顯示對話方塊。 最後, CreateDialogIndirect 會將視窗句柄傳回對話方塊。

CreateDialogIndirect 傳回之後,您可以使用 ShowWindow 函式來顯示對話框 (如果尚未顯示) 。 若要終結對話框,請使用 DestroyWindow 函式。 若要支援鍵盤流覽和其他對話方塊功能,對話框的訊息循環必須呼叫 IsDialogMessage函 式。

在標準對話框範本中, DLGTEMPLATE 結構和每個 DLGITEMTEMPLATE 結構都必須在 DWORD 界限上對齊。 在 DLGITEMTEMPLATE 結構後面的建立數據陣列也必須對齊 DWORD 界限。 範本中的所有其他可變長度陣列都必須在 WORD 界限上對齊。

在擴充的對話框範本中, DLGTEMPLATEEX 標頭和每個 DLGITEMTEMPLATEEX 控件定義都必須在 DWORD 界限上對齊。 建立數據陣列,如果有的話, 在 DLGITEMTEMPLATEEX 結構之後也必須對齊 DWORD 界限。 範本中的所有其他可變長度陣列都必須在 WORD 界限上對齊。

對話框範本中的所有字元字串,例如對話框和按鈕的標題,都必須是 Unicode 字串。 使用 MultiByteToWideChar 函 式從 ANSI 字串產生 Unicode 字串。

注意

winuser.h 標頭會將 CreateDialogIndirect 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winuser.h (包含 Windows.h)
程式庫 User32.lib
Dll User32.dll

另請參閱

概念

CreateDialog

CreateDialogIndirectParam

CreateDialogParam

CreateWindowEx

DLGITEMTEMPLATE

DLGITEMTEMPLATEEX

DLGTEMPLATE

DLGTEMPLATEEX

DestroyWindow

對話框

DialogProc

IsDialogMessage

MultiByteToWideChar

其他資源

參考

ShowWindow

WM_INITDIALOG

WM_SETFONT