我在使用DwmExtendFrameIntoClientArea
Windows 10 扩展窗口框架时遇到了一些麻烦.下面的图片显示了我得到的行为:
白色标题栏颜色从顶部延伸,而从侧面和底部延伸窗口的彩色边缘.
如果我将边距全部设置-1
为将框架一直延伸,则窗口将填充白色并完全丢失其彩色边缘:
这个结果非常不一致,我希望在窗口的所有侧面都能延伸白色,类似于Windows 8中彩色框架的扩展方式,或者在Windows 7和Vista中扩展了玻璃.
我试过在线搜索,但我找不到任何类似的问题.
这是我正在使用的代码:
#include#include #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int main(int argc, char **argv) { HINSTANCE hInstance = GetModuleHandle(NULL); MSG msg; HWND hwnd; WNDCLASSW wc; int message; wc.style = CS_HREDRAW | CS_VREDRAW; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.lpszClassName = L"Window"; wc.hInstance = hInstance; wc.hbrBackground = GetStockObject(BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpfnWndProc = WndProc; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); RegisterClassW(&wc); hwnd = CreateWindowW(wc.lpszClassName, L"Window", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 350, 250, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); while(1) { message = GetMessageW(&msg, NULL, 0, 0); if(message == -1) { char x[100]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), x, 100, NULL); puts(x); abort(); } else if(message == 0) break; TranslateMessage(&msg); DispatchMessageW(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_ACTIVATE: { MARGINS m = {50, 50, 50, 50}; HRESULT hr = DwmExtendFrameIntoClientArea(hwnd, &m); if(!SUCCEEDED(hr)) { char x[100]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), x, 100, NULL); puts(x); abort(); } break; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProcW(hwnd, msg, wParam, lParam); }
我做错了什么或者这只是Windows 10的一个问题?在此先感谢您的帮助!
编辑:我发布的代码与Windows 10上的Aero Lite和高对比度主题完美配合,但与默认的Windows 10主题无关.