无法注册hwnd窗口

时间:2014-05-04 10:41:21

标签: c++ windows hwnd

我试图创建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;
}

1 个答案:

答案 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

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