c++ - CreateDialog 失败,但为什么 GetLastError 返回 0?

标签 c++ dialog scintilla win32gui comctl32

我正在使用 scintilla editor component 为我的项目编写一个编辑器.该编辑器用于内部脚本语言,具有剪切、复制、粘贴等所有基本功能。作为其中一项功能,我还提供了搜索功能。当用户按下 Ctrl+F 理想情况下,它应该显示此对话框:

Search

但由于某些原因 CreateDialog API 失败,但 GetLastError 返回 0。另外请注意,我使用的是 Windows Common Controls

>>创建对话框的代码

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;
}

>>对话框的资源条目

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

唯一讨论相同问题的页面是:CreateDialog Failed, but GetLastError return 0 .我已经检查了那里提到的解决方案,但在我的项目中我链接到 comctl32.lib。我还检查了我的资源文件和资源 header 。对话条目似乎是正确的。


>>常用控件初始化

 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 控件需要 v6 的 comctl32,如 documentation 所述.您正在链接到 v5 comctl32,我怀疑这是导致错误的原因。您需要包括 v6 comctl32 application manifest .

关于c++ - CreateDialog 失败,但为什么 GetLastError 返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7297711/

相关文章:

Javascript此对象不支持此操作

java - 如何在java中设置消息对话框的位置?

dialog - 潮汐dk自定义对话框

python - SWIG 中的类型检查和重载方法

c++ - 为什么指针返回值而不是地址?

vb.net - 如何调用事件?

c++ - wxStyledTextCtrl (Scintilla) 中的缩进和智能缩进

c# - ScintillaNET 中的缩进和智能缩进

c++ - 使用带有 gsoap 代理类的 gsoap 独立服务器实现 http get

c++ - 在 CMake 中找不到带有 'include_directories' 的 header