我在.rc文件中定义了一个对话框:
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.将可执行文件与comctl32.lib链接 2.使用ICC_LINK_CLASS
调用InitCommonControlsEx然而,InitCommonControlsEx失败,即返回FALSE,所以现在的问题是如何让SysLink控件显示......:)
答案 0 :(得分: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”依赖关系的清单添加到您的项目中。
答案 1 :(得分: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);