Tôi đang gặp một số rắc rối kéo dài khung cửa sổ bằng DwmExtendFrameIntoClientArea
trên Windows 10. Các hình ảnh dưới đây cho thấy hành vi tôi nhận được:DwmExtendFrameIntoClientArea hành vi lạ trên Windows 10
Màu trắng là titlebar mở rộng từ trên xuống, trong khi từ các cạnh và đáy nó mở rộng cạnh màu của cửa sổ.
Nếu tôi đặt bên lề tất cả để -1
để mở rộng khung tất cả các cách, các cửa sổ được làm đầy với màu trắng và mất lợi thế cạnh màu của nó hoàn toàn:
Kết quả này là rất phù hợp, tôi đã mong đợi màu trắng sẽ được mở rộng trên tất cả các cạnh của cửa sổ, tương tự như cách khung màu được mở rộng trong Windows 8, hoặc kính được mở rộng trong Windows 7 và Vista.
Tôi đã thử tìm kiếm trực tuyến nhưng tôi chưa thể tìm thấy bất kỳ vấn đề tương tự nào.
Dưới đây là đoạn code Tôi đang sử dụng:
#include <windows.h>
#include <dwmapi.h>
#include <stdio.h>
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);
}
Tôi có làm gì sai hay là này chỉ là một vấn đề với Windows 10? Cảm ơn trước sự giúp đỡ nào!
Chỉnh sửa: Mã tôi đã đăng hoạt động hoàn hảo với cả Aero Lite và các chủ đề có độ tương phản cao trên Windows 10, nhưng không có chủ đề Windows 10 mặc định.
Hầu như là một câu hỏi hay. Ngoại trừ, câu hỏi bị thiếu. Xin giải thích, kết quả mong đợi là gì. – IInspectable
Tôi hy vọng nó chỉ đơn giản là mở rộng màu trắng của thanh tiêu đề, tương tự như cách khung màu được mở rộng trên Windows 8, hoặc kính trên Windows 7 & vista. Hiện tại, kết quả là không nhất quán và chỉ trông xấu xí. – YmFzZTY0
Vui lòng [edit] (http://stackoverflow.com/posts/34414751/edit) câu hỏi của bạn để bao gồm thông tin này. – IInspectable