使用非NULL hMenu参数创建窗口失败

时间:2013-09-03 18:06:30

标签: c++ winapi user-interface createwindow

除主窗口外,我正在尝试创建另一个顶级窗口。问题是,当我将第二个窗口的hMenu参数设置为非NULL值时,它不会显示。

e.g:

此窗口显示(hMenu == 0)

case IDC_BUTTON_SEND_COMMAND:
{
    CreateWindowExW(NULL,
                    L"CommandWindow", L"Send Command",
                    WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                    100, 100, 600, 400,
                    NULL,
                    (HMENU)0,
                    (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
    break;
}

此窗口未显示(hMenu == 4)

case IDC_BUTTON_SEND_COMMAND:
{
    CreateWindowExW(NULL,
                    L"CommandWindow", L"Send Command",
                    WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                    100, 100, 600, 400,
                    NULL,
                    (HMENU)4,
                    (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
    break;
}

我正在使用Windows 7。

1 个答案:

答案 0 :(得分:1)

(HMENU)4作为hMenu参数传递给CreateWindowEx以创建顶级窗口,告诉系统将菜单附加到该窗口。此菜单具有菜单句柄4.菜单句柄(HMENU)从CreateMenu等函数返回。如果句柄不是有效的HMENU窗口创建失败。

你的观察,窗口没有出现会误导你自己相信窗口确实存在。该窗口不存在,CreateWindowEx返回NULL。建议检查返回值,并在API调用失败时调用GetLastError通常非常有用。