2

每当我使用CreateWindowEx(...)(可以在下面的代码中找到确切的参数)创建一个窗口时,它就会像旧式窗口一样显示:

旧式窗户

只有当我在远程桌面上启动它,关闭连接并重新连接时,它才会更改为所需的 Windows 10 样式:

新风格窗口

它与WM_SETTINGCHANGE应用程序在执行此操作时收到的几条消息有关吗?

显然,我希望窗口在创建时具有现代风格,而不是在处理一些消息之后。

我尝试了WS_...风格参数的不同组合。奇怪的是,该应用程序只可靠地显示为WS_OVERLAPPEDWINDOW | WS_VISIBLE.

我已经尝试过ShowWindow(有各种论点)并且UpdateWindow在两个命令中。

我也尝试过弄乱目标平台和工具集,但无济于事(使用 VS2015、v140)。

代码片段:

WNDCLASSEX wc = {sizeof(WNDCLASSEX), NULL, WindowController::globalEventProcessor, 
                 0L, 0L, GetModuleHandle(NULL), NULL,
                 LoadCursor(NULL, IDC_ARROW), NULL, NULL,
                 _T("Window"), NULL};
RegisterClassEx(&wc);

HWND handle = CreateWindowEx(
            NULL,
            wc.lpszClassName,
            _T("Test"),
            WS_OVERLAPPEDWINDOW | WS_VISIBLE,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            parentWindow ? parentWindow->getHandle() : NULL,
            NULL,
            wc.hInstance,
            reinterpret_cast<LPVOID>(this)
);

if (handle != NULL)
{
    ... // resizing the window's contents
    UpdateWindow(handle);
}
4

1 回答 1

1

奇怪的是,解决方案似乎是WS_VISIBLE从样式标志中删除,并手动显示窗口:

if (handle != NULL)
{
    ... // resizing the window's contents
    ShowWindow(handle, 1); /* Add this */
    UpdateWindow(handle);
}

我 100% 确定我已经尝试过了,但突然就奏效了。任何...

于 2019-07-29T08:35:15.763 回答