sto avendo qualche problema estendendo l'infissi utilizzando DwmExtendFrameIntoClientArea
su Windows 10. Le immagini qui sotto mostrano il comportamento sto ottenendo:DwmExtendFrameIntoClientArea strano comportamento su Windows 10
Il colore bianco è barra del titolo esteso dalla parte superiore, mentre dai lati e dal fondo estende il bordo colorato della finestra.
Se fisso i margini tutti -1
estendere le cornici in fondo, la finestra viene riempita con il bianco e perde il suo bordo colorato complessivamente:
Questo risultato è molto incoerente, ero mi aspetto che il colore bianco sia esteso su tutti i lati della finestra, in modo simile al modo in cui la cornice colorata viene estesa in Windows 8, oppure il vetro viene esteso in Windows 7 e Vista.
Ho provato a cercare online, ma non sono stato in grado di trovare problemi simili.
Ecco il codice che sto utilizzando:
#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);
}
sto facendo qualcosa di sbagliato o è solo un problema con Windows 10? Grazie in anticipo per qualsiasi aiuto!
Modifica: Il codice che ho postato funziona perfettamente sia con Aero Lite che con i temi ad alto contrasto su Windows 10, ma non con il tema predefinito di Windows 10.
Quasi una buona domanda. Tranne che la domanda è mancante. Per favore, spiega quale dovrebbe essere il risultato atteso. – IInspectable
Mi aspetto che si estenda semplicemente il colore bianco della barra del titolo, simile a come la cornice colorata è estesa su Windows 8, o il vetro su Windows 7 e Vista. Attualmente il risultato è incoerente e sembra solo brutto. – YmFzZTY0
Per favore [modifica] (http://stackoverflow.com/posts/34414751/edit) la tua domanda per includere queste informazioni. – IInspectable