2011-06-15 137 views
2

我在rc文件定義爲一個對話框:CreateDialogParam永遠不會調用WM_INITDIALOG

IDD_DIALOG_AUTHENTICATION DIALOGEX 0, 0, 214, 138 
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION 
CAPTION "Dialog" 
FONT 8, "MS Shell Dlg", 400, 0, 0x1 
BEGIN 
    DEFPUSHBUTTON "Validate",ID_BTN_VALIDATE,102,117,50,14 
    PUSHBUTTON  "Exit",ID_BTN_EXIT,157,117,50,14 
    LTEXT   "Username",IDC_STATIC,7,9,45,8 
    CONTROL   "<a>SysLink</a>",IDC_SYSLINK,"SysLink",WS_TABSTOP,7,99,60,14 
    LTEXT   "Password",IDC_STATIC,7,25,45,8 
    LTEXT   "messages",IDC_MESSAGE,7,39,197,55 
    EDITTEXT  IDC_USERNAME,44,7,140,14,ES_AUTOHSCROLL 
    EDITTEXT  IDC_PASSWORD,44,22,140,14,ES_PASSWORD | ES_AUTOHSCROLL 
END 

與ID爲 「IDD_DIALOG_AUTHENTICATION」。 CreateDialogParam稱爲:

HWND hDlgWnd = CreateDialogParamW(GetModuleHandle(NULL),L"IDD_DIALOG_AUTHENTICATION", (DLGPROC)dialogProc, (LPARAM)this); 

但它返回一個空HWND和NO的錯誤代碼(GetLastError函數()== 0)。

有發到我的dialogProc功能幾條消息,但從未WM_INITDIALOG(該消息WM_SETFONT,0x0090(??),WM_DESTROY和WM_NCDESTROY)

操作系統是Vista的32位(無SP)。

任何想法??

編輯:好的,罪魁禍首是SysLink控制。沒有它,我得到WM_INITDIALOG消息,並且對話框正常。

但是,具有用於SYSLINK控制的需要我: 1.鏈接與ICC_LINK_CLASS的comctl32.lib 2.呼叫INITCOMMONCONTROLSEX

然而可執行文件,INITCOMMONCONTROLSEX失敗即返回FALSE,所以現在的問題是如何讓SYSLINK控件顯示... :)

+0

你在使用dialogProc中的未處理消息做什麼? – 2011-06-15 09:24:13

+0

@ will:只需返回FALSE – Robert 2011-06-15 09:42:50

回答

0

變化:

HWND hDlgWnd = CreateDialogParamW(GetModuleHandle(NULL),L"IDD_DIALOG_AUTHENTICATION", (DLGPROC)dialogProc, (LPARAM)this); 

要:

HWND hDlgWnd = CreateDialogParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_AUTHENTICATION), (DLGPROC)dialogProc, (LPARAM)this); 
+0

不,不能這樣做。我正在做一個跨平臺的對話框處理程序,我需要能夠通過名稱來引用對話框。我有答案,很快就會發布。 – Robert 2011-06-15 11:40:14

3

所有你需要的是

#if defined _M_IX86 
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 
#elif defined _M_X64 
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") 
#else 
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 
#endif 
在你的stdafx.h文件

。 或者只是將'Microsoft.Windows.Common-Controls'的依賴項的清單添加到您的項目中。

相關問題