首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ CreateWindowEx()创建窗口失败

C++ CreateWindowEx()创建窗口失败
EN

Stack Overflow用户
提问于 2015-04-05 17:01:35
回答 2查看 1.6K关注 0票数 0

我已经开始观看手工制作的英雄视频,我正在尝试制作一个win32窗口,但是CreateWindowEx()函数仍然失败。

我检查了错误代码,得到了1407。

密码在下面。

提前谢谢。

代码语言:javascript
复制
    #include <Windows.h>

LRESULT CALLBACK WindowProcedure(
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    )
{
    LRESULT result;

    switch (uMsg)
    {
    case WM_ACTIVATEAPP:
        {
            OutputDebugStringA("The window is now active");

            break;
        }

    case WM_SIZE:
        {
            OutputDebugStringA("The window is now being resized");

            break;
        }

    case WM_CREATE:
        {
            OutputDebugStringA("The window has been created");

            break;
        }

    default:
        {
            result = DefWindowProc(hwnd, uMsg, wParam, lParam);

            break;
        }
    }

    return result;
};

int CALLBACK WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
    )
{
    WNDCLASS GameWindow;

    GameWindow.style = CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
    GameWindow.lpfnWndProc = WindowProcedure;
    GameWindow.hInstance = hInstance;
//      HICON     hIcon;
    GameWindow.lpszClassName = "HandmadeHeroWindowClass";

    RegisterClass(&GameWindow);

    if (HWND GameWindowHandle = CreateWindowEx(
        0,
        GameWindow.lpszClassName,
        "Handmade Hero",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        0,
        0,
        hInstance,
        0
        ))
    {

        for (;;)
        {
            MSG message;
            BOOL messageResult = GetMessage(&message, GameWindowHandle, 0, 0);
            if (messageResult != 0)
            {
                DispatchMessage(&message);
            }
            else if (messageResult == 0)
            {
                break;
            }
            else
            {
                // ERROR
            }
        }

    }
    else
    {
        OutputDebugStringA("Couldn't create window");
    }

    DWORD error = GetLastError();

    return 0;
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-06 01:28:16

由于Remy得到了答案,问题是我的WNDCLASS对所有字段都没有初始化值,除了我更改的字段之外,这导致了RegisterClass()失败,从而导致CreateWindowEx()失败。

我将WNDCLASS声明更改为:

代码语言:javascript
复制
WNDCLASS GameWindow = {0};

感谢每一个帮忙的人。

票数 1
EN

Stack Overflow用户

发布于 2015-04-05 17:14:31

您的窗口过程在除default:之外的每个路径中返回一个未初始化的变量,这是未定义的行为,窗口创建失败是完全可能的。

对于WM_CREATE,文档说:

如果应用程序处理此消息,则应返回零以继续创建窗口。

正如迈克尔在评论中指出的那样,RegisterClass正在失败。同样的错误类型,您传递的是一个WNDCLASS结构,而大多数成员都没有初始化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29459827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档