CreateDialog Win32 API呼叫的一個小問題

志_祥發表於2014-11-03

在老版本的VC編譯器上,關鍵呼叫是以下2句:


    InitCommonDialogs();

    HWND hwndDialog = CreateDialog(hInstance, "IDD_XXX", ...);


但是在新版本的VS上,InitCommonDialogs這個API似乎已經沒了,而CreateDialog還有,問題是,對話方塊的介面出不來,什麼原因呢?


推測InitCommonDialogs這個API註冊了預設的系統對話方塊視窗類,這樣CreateDialog的第二個引數才能以字串的形式引用,現在InitCommonDialogs雖然沒了,但必須要有一種機制傳進正確的視窗類。。。


按照這個思路再次確認資原始檔,測試專案首先通過resource.h引用.rc資原始檔,而.rc裡定義了一個名字叫IDD_XXX的對話方塊資源,這個地方沒有問題,


但是,資原始檔裡的IDD_XXX實質上是整數型別,而CreateDialog的第2個引數要求的卻是字串,這個地方似乎有問題。


再次確認MSDN裡的API文件說明,哈哈,果然,有一個MAKEINTRESOURCE巨集,可以把整數型別的IDD_XXX值轉換為字串型別(這裡我的感覺是新版本的Win32 執行時環境使用了不同的視窗類字串機制),改成下面的寫法就可以了:


HWND hwndDialog = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_XXX), ...);


InitCommonDialogs不要需要。

相關文章