2016-04-04 18 views
2

エアー・スナップ機能を備えたQt5.6.0でボーダーレス・ウィンドウを作成しようとしています。 すべてが機能しますが、ウィンドウを最大化するときを除いて、それは大きすぎます。エアロ・スナップが大きすぎる最大化状態の枠無しウィンドウ

マイ画面解像度が2560x1440ので、ウィンドウは2560x1400(タスクバー40個のピクセル)サイズ決めされるべきであるが、WM_SIZEメッセージに、新しいサイズが2576x1416あります。 したがって、ウィンドウはすべての方向で大きすぎる8ピクセルです。 これはまた、ウィンドウが左上隅に揃っていないことを意味します。つまり、ウィンドウは両方向で正確に8ピクセルオフです。

私はこの問題の解決策を見つけることができません。私が試したことはすべてうまくいかず、バグが発生します。

これを修正するのは、WS_CAPTIONWS_THICKFRAMEのスタイルを削除することですが、その後、私はアレオスナップ機能を失います。

私は何とかQtまたはDWMにウィンドウを16ピクセル小さくして右に8ピクセル、下に移動するように言わなければなりません。誰かがそれをする方法についてのアイデアを持っていますか?

答えて

0

私の最初の試みは、利用可能なジオメトリに窓ジオメトリを設定しました:

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; 
0

I somehow have to tell Qt or DWM to make the window 16 pixels smaller and move it 8 pixels right, and bottom. Does anybody have an idea on how to do that?

DWMはデスクトップウィンドウマネージャですか?その後、プラットフォームはWindowsです。

https://bugreports.qt.io/browse/QTBUG-4362

がある限り、それはQtの5.6程度であるとして、あなたは非常に可能性がQtの:: CustomizeWindowHintとウィジェットの話属性セット後、まだ固定されていないのQtでの既知のバグがあります私はそのバグを数回見つけ、上記のリンクでBiTOkが提案した回避策が私のために働いた。

関連する問題