积极答复者
RegisterClassEx 注册失败,找不到原因。代码应该没问题的说。求大神赐教。代码如下

问题
-
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hDC;
switch (message)
{
case WM_PAINT:
hDC = BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmd, int nShow)
{
WNDCLASSEX cls;
cls.cbSize = sizeof(cls);
cls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
cls.hCursor = LoadCursor(NULL, IDC_ARROW);
cls.style = CS_HREDRAW | CS_VREDRAW;
cls.lpfnWndProc = WndProc;
cls.hInstance = hInstance;
cls.lpszMenuName = NULL;
cls.lpszClassName = "DX11BookWindowClass";
if (!RegisterClassEx(&cls))
return -1;
RECT rc = { 0, 0, 640, 480 };
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
HWND hwnd = CreateWindow(cls.lpszClassName, "Blank Win32 Window",
WS_OVERLAPPEDWINDOW, 0, 0, rc.right - rc.left, rc.bottom - rc.top,
0, 0, hInstance, 0);
if (!hwnd) return -1;
ShowWindow(hwnd, nShow);
//Demo Initialize
MSG msg = { 0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//Update
//Draw
}
//Demo Shutdown
return static_cast<int>(msg.wParam);
}
答案
-
Hi LongLife-Astray,
我测试你的代码了,的确是注册不过去,但是我用我的代码,在工程里面就可以注册过去,所以我觉得问题还是你的代码有问题。下面是我工程里面的代码,你可以参考一下,改写你的代码,我帮你改了一些参数,还是不行。
WNDCLASSEX wcex;
wcex.cbSize =
sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DEMO1));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_DEMO1);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
returnRegisterClassEx(&wcex);
编辑:
我把你的注册代码,放到我的工程里面,也是注册不了的,所以还是你代码的问题。
- 已编辑 Hart WangModerator 2016年4月20日 3:20
- 已标记为答案 LongLife-Astray 2016年4月20日 8:24
全部回复
-
Hi LongLife-Astray,
我测试你的代码了,的确是注册不过去,但是我用我的代码,在工程里面就可以注册过去,所以我觉得问题还是你的代码有问题。下面是我工程里面的代码,你可以参考一下,改写你的代码,我帮你改了一些参数,还是不行。
WNDCLASSEX wcex;
wcex.cbSize =
sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DEMO1));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_DEMO1);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
returnRegisterClassEx(&wcex);
编辑:
我把你的注册代码,放到我的工程里面,也是注册不了的,所以还是你代码的问题。
- 已编辑 Hart WangModerator 2016年4月20日 3:20
- 已标记为答案 LongLife-Astray 2016年4月20日 8:24
-
谢谢了
是这个WNDCLASSEX 里的传参少了。问题解决了 很感谢
- 已建议为答案 Hart WangModerator 2016年4月20日 5:49