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

问题描述 投票:0回答:2

除了主窗口,我正在尝试创建另一个顶级窗口。问题是,当我将第二个窗口的

hMenu
参数设置为非 NULL 值时,它不会显示。

例:

此窗口显示 (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.

c++ winapi user-interface createwindow
2个回答
1
投票

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

你的观察,即窗口 没有出现 误导你自己相信窗口确实存在。窗口不存在,

CreateWindowEx
返回
NULL
。建议检查返回值,并且在 API 调用失败时调用
GetLastError
通常很有帮助。


0
投票

嗯..我知道OP是很久以前的事了,但无论如何让我插话。

可以说,(HMENU)4 not 有效的菜单handle,例如从 CreateMenu() 返回的菜单。

如果窗口是子窗口,它将是一个有效的control ID。 如果在 WNDCLASS 结构中指定,数字 4 也是一个有效的菜单resource ID

干杯

© www.soinside.com 2019 - 2024. All rights reserved.