【发布时间】:2019-07-16 08:54:37
【问题描述】:
每当我使用CreateWindowEx(...) 创建一个窗口(具体参数可以在下面的代码中找到)时,它都会像旧式窗口一样显示:
仅当我在远程桌面上启动它,关闭连接并重新连接时,它才会更改为所需的 Windows 10 样式:
这是否与应用程序在执行此操作时收到的几条WM_SETTINGCHANGE 消息有关?
显然,我希望窗口在创建时具有现代风格,而不是在处理某些消息之后。
我尝试了WS_... 样式参数的不同组合。奇怪的是,该应用程序仅以WS_OVERLAPPEDWINDOW | WS_VISIBLE 可靠地显示。
我在两个命令中都尝试过ShowWindow(带有各种参数)和UpdateWindow。
我也尝试过使用目标平台和工具集,但无济于事(使用 VS2015、v140)。
代码sn-p:
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);
}
【问题讨论】:
-
只是猜测,但您可能需要应用程序清单。
-
@SebastianRedl 我已按照指南在 VS2015 中添加清单,但要么我做错了,要么没有效果。
标签: c++ createwindowex window-style