-1

除了主窗口之外,我还试图创建另一个顶级窗口。问题是,当我将第二个窗口的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。

4

1 回答 1

1

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

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

于 2013-09-03T18:29:07.627 回答