函式功能
該宏根據記憶體中的對話框模板資源創建一個模態的對話框。DialogBoxlndirect宏直到指定的回調函式通過調用EndDialog函式中止模態的對話框才能返回。
DiaogBoxlndirect宏使用DialogBoxParam函式。函式原型:int DialogBoxlndirect(HINSTANCE hlnstance,LPDLGTEMPLATE IpTemplate,HWND hWndParent,DLGPROClpDialogFunc);
參數
hlnstance:標識一個模組的事例,該模組創建對話框。
IpTemplate:此參數指向含有一個模板的全局記憶體對象的指針。DialogBoxlndirect用此模板創建對話框。對話框模板由描述對話框的標題組成,跟隨著標題之後的是描述每一個控制的一個或多個數據塊,模板可以用標準格式或擴展格式。
在標準模板中,標題是由DLGTEMPLATE結構跟隨一個變長數組組成。每個控制的數據是由DLGTEMPLATE結構跟隨一個變長數組組成。
在擴展模板中,標題用DLGTEMPLATEEX格式,且控制定義用DLGITEMPLATEEX格式。
HWndParent:指定擁有對話框的視窗。
IpDialogFunc:指向對話框過程的指針。有關更詳細的關於對話框過程的信息,請參見DialogProc。
返回值:如果函式調用成功則返回值為在對函式EndDialog的調用中的nResult參數,該EndDialog函式用於中止對話框。如果函式調用失敗,則返回值為C1。 若想獲得更多錯誤信息請調用GetLastError函式。
備註
DialogBoxlndirect宏使用CreateWindowEx函式創建對話樞.然後把一個WM_INITDIALOG訊息傳遞到對話框過程。如果模板指定DS_SETFONT類型DialogBoxlndirect函式將一個WM_SETFONT訊息傳遞到對話框。(不管模板是否指定WS_VISIBLE類型),函式顯示對話框使屬主視窗失效,且為對話框啟動它本身的訊息循環來檢索和傳遞訊息。
當對話框應用程式調用EndDialog 函式時,DialogBoxlndirect函式清除對話框,中止訊息循環,使主視窗生效(如果以前有效)且返回EndDialog函式調用中的nResult參數。
在標準對話框模板中,DLGTEMPLATE結構和每一個DLGITEMTEMPLATE結構必須按DWORD邊界對齊,遵循DLGEMTEPLATE結構而創建的數據數組也一定按DWORD邊界對齊。模板中其他所有變長數組一定要按DWORD邊界進行調整。
在擴展對話框模板上DLGTEMPLATEEX結構和每一個DLGITEMTEMPLATEEX結構必須按DWORD邊界對齊,遵循DLGEMTEPLATE結構而創建的數據數組也一定按DWORD邊界對齊。模板中其他所有變長數組一定要按DWORD邊界進行調整。
所有對話框模板的字元串,例如對話框和按鈕的標題,一定是Unicode字元串。使用
MultiByteToWidechar函式產生這些Unicode字元串可以創建在Windows和Windows NT兩種系統上工作的代碼。
Windows 95和以後版本:系統可支持每個對話框模板最多為255個控制。為把多於255個控制放入對話框。可以在WM_INITDLAIOG訊息處理器中創建控制,而不是把它們放入模板中。
Windows CE:IpTemplateName參數指向的對話框模板中DLGTEMPLATE結構並不支持所有的類型。
速查:Windows NT:3.1 及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;頭檔案:Winuser.h;庫檔案:user32.lib Unicode:在Windows NT上實現為Unicode和ANSI兩種版本。