私の最初の試みは、利用可能なジオメトリに窓ジオメトリを設定しました:
QRect rect = QApplication::desktop()->availableGeometry();
setGeometry(rect.left() , rect.top(), rect.right(), rect.bottom());
唯一の問題は、ウィンドウが右と下側と
setGeometry(rect.left() , rect.top(), rect.right() + 1, rect.bottom() + 1);
上の画素小さすぎるということです
は私にエラーを与える:
QWindowsWindow::setGeometry: Unable to set geometry 2560x1400+0+0 on QWidgetWindow/'MainWindowWindow'. Resulting geometry: 2576x1416+-8+-8 (frame: 0, 0, 0, 0, custom margin: 0, 0, 0, 0, minimum size: 45x13, maximum size: 16777215x16777215)
それから私は、Visual Studio 2の矩形座標を見て015と、彼らはすべての方向に8つのピクセルより大きいボーダレス窓の私の実装と同じサイズ、です。
私はそれは、ウィンドウが最大化されている場合は、画面の外にクリップすると、窓領域を設定していない私のウィンドウの内容を8の余裕を与えることができます。
setContentsMargins({ 8, 8, 8, 8 });
HRGN WinRgn;
RECT winrect;
GetClientRect(hwnd, &winrect);
WinRgn = CreateRectRgn(8, 8, winrect.right - 8, winrect.bottom - 8);
SetWindowRgn(hwnd, WinRgn, true);
ウィンドウが復元されます場合は、以前の変更をリセットする必要があります。 結果は次のとおりです。
case WM_SIZE:
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hwnd, &wp);
if (wp.showCmd == SW_MAXIMIZE) {
setContentsMargins({ 8, 8, 8, 8 });
HRGN WinRgn;
RECT winrect;
GetClientRect(hwnd, &winrect);
WinRgn = CreateRectRgn(8, 8, winrect.right - 8, winrect.bottom - 8);
SetWindowRgn(hwnd, WinRgn, true);
UpdateWindow(hwnd);
is_fullscreen = true;
} else {
if (is_fullscreen) {
setContentsMargins({ 0, 0, 0, 0 });
SetWindowRgn(hwnd, NULL, true);
is_fullscreen = false;
}
}
break;