首页 > 解决方案 > qt5.12用winapi创建对话框

问题描述

我想在窗口上创建对话框,该对话框将显示在任务管理器之类的顶层(甚至游戏窗口)上。我写了下一段代码:

    static const wchar_t* className = L"GraphDialog";
    WNDCLASSEX wx = {};
    wx.cbSize = sizeof(WNDCLASSEX);
    wx.hInstance = GetModuleHandle(NULL);
    wx.lpszClassName = className;
    if ( RegisterClassEx(&wx) )
    {
        HWND h = CreateWindowEx(WS_EX_TOPMOST, (LPCWSTR)className, NULL, WS_POPUP,
                                CW_USEDEFAULT, CW_USEDEFAULT,
                                CW_USEDEFAULT, CW_USEDEFAULT,
                                NULL, NULL, NULL, NULL);
        QWindow *qw = QWindow::fromWinId((WId)h);
        if (qw)
        {
            GraphDialog* dialog = qobject_cast<GraphDialog*>(createWindowContainer(qw));
            if (dialog)
            {
                dialog->init(...);
                dialog->exec();
            }
        }
    }

GraphDialog 是 QDialog。不幸的是,当调用函数 CreateWindowEx 时,我有错误 SIGSEGV 。

标签: winapiqt5

解决方案


您注册的班级尚未设置导致SIGSEGV的lpfnWndProc成员。


推荐阅读