繁体   English   中英

无法注册hwnd窗口

[英]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结构的样式成员。 有关类样式的列表,请参阅窗口类样式

在该链接之后,我们获得了有效窗口类样式的列表。 不幸的是,你正在使用的那些不在列表中。 我想你可能想给那些CreateWindowExdwStyle参数,它根据CreateWindowEx文档接受这些有效的窗口样式

如果它有助于澄清事物,窗口样式与窗口样式不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM