gpt4 book ai didi

C++ CreateWindowEx 返回 NULL

转载 作者:可可西里 更新时间:2023-11-01 09:39:56 26 4
gpt4 key购买 nike

我正在尝试使用 C++ 设置一个简单的窗口,但我对 CreateWindowEx 的调用返回了 NULL。我使用的大部分代码来自 example在 MSDN 网站上。我尝试过的所有方法均无效,如有任何帮助,我们将不胜感激。

代码如下:

//Include the windows header
#include <Windows.h>

//Forward declaration of the WndProc function
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

//Main entry point
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {
//Window class name
const wchar_t windowName[] = L"Window Class";

//Set up window class
WNDCLASS wnd;
wnd.lpfnWndProc = WndProc;
wnd.hInstance = hInstance;
wnd.lpszClassName = windowName;

//Register window class
RegisterClass(&wnd);

//Create window
//! This returns NULL
HWND hWnd = CreateWindowEx(
0,
windowName,
L"Windows Programming",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

//Simple check to see if window creation failed
if(hWnd == NULL) {
//Pause
system("PAUSE");
return -1;
}

//Show the window
ShowWindow(hWnd, nCmdShow);

//Main message loop
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

//WndProc function
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDc = BeginPaint(hWnd, &ps);

FillRect(hDc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW + 1));

EndPaint(hWnd, &ps);

return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}

return DefWindowProc(hWnd, msg, wParam, lParam);
}

最佳答案

请注意,MSDN 中的示例在设置它关心的字段之前将 WNDCLASS 的所有字段归零。

WNDCLASS wnd = { };  // from MSDN example

空括号是 C 和 C++ 的简写形式,用于将整个结构初始化为 0。通常将其写为 { 0 } ,这在技术上略有不同,但具有相同的净效果。

在您的代码中,您放弃了初始化:

WNDCLASS wnd;  // your code

因此,您可能会在其他重要字段之一(如 cbClsExtracbWndExtra)中获得一些垃圾值,这导致类无法注册。由于该类未注册,您无法创建该类的窗口。

关于C++ CreateWindowEx 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com