CreateDialog失败,但为什么GetLastError返回0?
问题描述:
我正在使用scintilla editor component为我的项目编写一个编辑器。该编辑器适用于内部脚本语言,具有剪切,复制,粘贴等所有基本功能。作为该功能之一,我还提供搜索功能。当用户按下Ctrl键+˚F理想应该显示这个对话框:CreateDialog失败,但为什么GetLastError返回0?
但由于某些原因CreateDialog API是失败,但GetLastError返回0。同时请注意,我正在使用Windows公共控件。
>>代码为对话框
IDD_FIND DIALOGEX 0, 0, 304, 90
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Find Text"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Search String",IDC_STATIC,7,7,44,8
EDITTEXT IDC_FIND_TEXT,7,20,217,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "Find Next",IDC_FIND_NEXT,243,7,54,16,WS_DISABLED
PUSHBUTTON "Find Previous",IDC_FIND_PREVIOUS,243,26,54,16,WS_DISABLED
PUSHBUTTON "Close",IDCANCEL,243,45,54,16
CONTROL "Match case",IDC_FIND_CASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,42,52,10
CONTROL "Match whole word",IDC_FIND_WHOLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,55,74,10
CONTROL "Wrap around",IDC_FIND_WRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,42,58,10
CONTROL "<a>Goto Replace (Ctrl+H)</a>",IDC_FIND_OPENREPLACE,
"SysLink",WS_TABSTOP,218,70,79,13
END
谈论同样的问题的唯一页面创建对话框
HWND CreateFindDialog(HINSTANCE hInstance, HWND hWnd, UINT id)
{
HWND dlgHwnd = ::CreateDialog(hInstance, MAKEINTRESOURCE(id), hWnd, FindDlgProc);
if(dlgHwnd == NULL)
{
wchar_t buf [100];
wsprintf (buf, L"Error x%x", GetLastError());
MessageBox (0, buf, L"CreateDialog", MB_ICONEXCLAMATION | MB_OK);
}
return(dlgHwnd);
}
BOOL CALLBACK FindDlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_INITDIALOG:
MessageBox (0, L"in", L"CreateDialog", MB_ICONEXCLAMATION | MB_OK);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
EndDialog(hWndDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}
>>资源条目是这样的:。我已经检查过那里提到的解决方案,但是在我的项目中我链接到comctl32.lib。我也检查了我的资源文件和资源头。对话框条目似乎是正确的。
>>常用控件初始化
INITCOMMONCONTROLSEX iccx;
iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
iccx.dwICC = ICC_WIN95_CLASSES|ICC_COOL_CLASSES|ICC_BAR_CLASSES|ICC_USEREX_CLASSES;
if (!InitCommonControlsEx(&iccx))
return;
任何建议/想法将是有益的。谢谢。
答
SysLink控件需要comctl32的v6,如documentation所述。你链接到v5 comctl32,我怀疑这是你错误的原因。您需要包含v6 comctl32 application manifest。
+0
感谢您的及时回复。 – Favonius
你是如何初始化comctl32的?你表现了哪个版本? –
我问,因为[SysLink](http://msdn.microsoft.com/en-us/library/bb760706(v = vs.85).aspx)需要v6 comctl32。 –
@David Heffernan:请看我最新的答案。如果有帮助,我正在使用Windows Vista和Service Pack 1,Visual Studio 2008和最新版本的闪烁体。谢谢。 – Favonius