[英]Can't register hwnd window
我正在尝试创建hwnd窗口但是当我尝试注册它时出现错误。 如果Register函数无法注册窗口,那么错误就是MessageBox通知,我复制了大部分代码,所以我真的不明白是什么问题。 这是在VS13中编译的代码:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
WNDCLASSEX WndClass;
HWND hwnd;
MSG Msg;
hInst = hInstance;
WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
WndClass.lpfnWndProc = WindowProcedure;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = (LPCWSTR)gszClassName;
WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&WndClass)){
MessageBox(NULL, L"Unable to register window", L"Error", MB_ICONSTOP | MB_OK);
return 0;
}
hwnd = CreateWindowEx(
WS_EX_STATICEDGE,
L"MyMainClass",
L"Try v2.0",
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
500, 400,
NULL, NULL,
hInstance,
NULL);
if (hwnd == NULL){
MessageBox(NULL, L"Unable to create window", L"Error", MB_ICONSTOP | MB_OK);
return 0;
}
WndClass.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
这是你的问题。 根据WNDCLASSEX
文档 ,
样式
班级风格。 该成员可以是Class Styles的任意组合。
按照Class Styles链接,我们得到:
类样式定义窗口类的其他元素。 可以使用按位OR(|)运算符组合两种或更多样式。 要为窗口类指定样式,请将样式指定给WNDCLASSEX结构的样式成员。 有关类样式的列表,请参阅窗口类样式 。
在该链接之后,我们获得了有效窗口类样式的列表。 不幸的是,你正在使用的那些不在列表中。 我想你可能想给那些CreateWindowEx
的dwStyle
参数,它根据CreateWindowEx
文档接受这些有效的窗口样式 。
如果它有助于澄清事物,窗口类样式与窗口样式不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.