我试图创建hwnd窗口但是当我尝试注册它时出现错误。 如果注册功能无法注册窗口,则错误是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;
}
答案 0 :(得分:2)
WndClass.style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
这是你的问题。根据{{3}},
风格
的任意组合
班级风格。该成员可以是WNDCLASSEX
docs。
按照Class Styles链接,我们得到了这个:
类样式定义窗口类的其他元素。可以使用按位OR(|)运算符组合两种或更多样式。要为窗口类指定样式,请将样式指定给WNDCLASSEX结构的样式成员。有关课程样式的列表,请参阅Class Styles。
在该链接之后,我们获得了有效窗口类样式的列表。不幸的是,你正在使用的那些不在列表中。我认为您可能打算将这些参数提供给CreateWindowEx
的{{1}}参数,该参数根据Window Class Styles接受these valid window styles。
如果它有助于澄清事物,那么窗口类样式与窗口样式不同。