ich einige Probleme mit dem Fenster erstreckt Rahmen unter Verwendung DwmExtendFrameIntoClientArea
unter Windows 10. Die Bilder unten zeigen das Verhalten Ich erhalte:DwmExtendFrameIntoClientArea seltsames Verhalten auf 10 Windows-
Die weiße Farbe ist titlebar von oben und von den Seiten und von der Unterseite erstreckt sich der farbige Rand des Fensters.
Wenn ich die Ränder alle -1
setze den Rahmen der ganzen Weg zu verlängern, wird das Fenster mit weißen gefüllt und verliert seine farbigen Ränder zusammen:
Dieses Ergebnis sehr inkonsistent ist, bin ich Es wird erwartet, dass die weiße Farbe an allen Seiten des Fensters erweitert wird, ähnlich wie bei Windows 8 der farbige Rahmen oder bei Windows 7 und Vista das Glas erweitert wird.
Ich habe versucht, online zu suchen, aber ich konnte keine ähnlichen Probleme finden.
Hier ist der Code, ich verwende:
#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);
}
Bin ich etwas falsch zu machen oder ist das nur ein Problem mit Windows 10? Vielen Dank im Voraus für jede Hilfe!
Bearbeiten: Der Code, den ich gepostet habe, funktioniert perfekt mit Aero Lite und den kontrastreichen Designs unter Windows 10, aber nicht mit dem Standard-Windows 10-Design.
Fast eine gute Frage. Außer, die Frage fehlt. Bitte erläutern Sie, was das erwartete Ergebnis sein sollte. – IInspectable
Ich erwarte, dass es einfach die weiße Farbe der Titelleiste erweitert, ähnlich wie der farbige Rahmen auf Windows 8 oder das Glas auf Windows 7 & Vista erweitert wird. Derzeit ist das Ergebnis inkonsistent und sieht nur hässlich aus. – YmFzZTY0
Bitte [bearbeiten] (http://stackoverflow.com/posts/34414751/edit) Ihre Frage, um diese Informationen aufzunehmen. – IInspectable