CreateWindowEx 在 Windows 10 上创建旧的 (Windows 7) 样式边框
CreateWindowEx creates old (Windows 7) style border on Windows 10
每当我用 CreateWindowEx(...)
创建一个 window 时(确切的参数可以在下面的代码中找到),它显示为旧样式 window:
只有当我在远程桌面上启动它,关闭连接并重新连接时,它才会更改为所需的 Windows 10 样式:
这与应用程序在执行此操作时收到的几条 WM_SETTINGCHANGE
消息有关吗?
显然,我希望 window 在创建时具有现代风格,而不是在处理一些消息之后。
我尝试了 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);
}
奇怪的是,解决方案似乎是从样式标志中删除 WS_VISIBLE
,并手动显示 window:
if (handle != NULL)
{
... // resizing the window's contents
ShowWindow(handle, 1); /* Add this */
UpdateWindow(handle);
}
我 100% 确定我已经尝试过了,但突然就奏效了。随便...
每当我用 CreateWindowEx(...)
创建一个 window 时(确切的参数可以在下面的代码中找到),它显示为旧样式 window:
只有当我在远程桌面上启动它,关闭连接并重新连接时,它才会更改为所需的 Windows 10 样式:
这与应用程序在执行此操作时收到的几条 WM_SETTINGCHANGE
消息有关吗?
显然,我希望 window 在创建时具有现代风格,而不是在处理一些消息之后。
我尝试了 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);
}
奇怪的是,解决方案似乎是从样式标志中删除 WS_VISIBLE
,并手动显示 window:
if (handle != NULL)
{
... // resizing the window's contents
ShowWindow(handle, 1); /* Add this */
UpdateWindow(handle);
}
我 100% 确定我已经尝试过了,但突然就奏效了。随便...