簡體   English   中英

使用Areo Snap,Shadow,最小化動畫和搖動的無邊框窗口

[英]Borderless Window Using Areo Snap, Shadow, Minimize Animation, and Shake

我在Windows上使用無邊框窗口創建應用程序。 但是,由於窗口是無邊框的,我沒有陰影,快照,最小化動畫或抖動。 我環顧四周,發現沒有解釋如何實現這一點的網站。 但是,我知道這是可能的,因為Office 2013,Visual Studio 2012和Steam都具有這些功能並且是無邊界的。 我專門使用QT和C ++但是如果你已經為另一個窗口庫解決了這個問題,我也想聽聽你的解決方案。 無論是。 並且通過areo陰影,我不是指兩側的陰影,我的意思是所有活動的原生areo windows應用程序的所有面上的發光陰影。

在使用Spy ++檢查Steam的窗口(它的窗口樣式,它如何回復窗口消息)並嘗試匹配它所做的一切之后,結合這個C#無邊框窗口行為的DWMAPI調用,我相信我弄明白了。

要隱藏窗口的邊框,請在WindowProc中處理WM_NCCALCSIZE消息:

case WM_NCCALCSIZE: {
    if (window->is_borderless) {
        return 0;
    } else {
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }
}

要啟用陰影,您需要做的就是:

MARGINS borderless = {1,1,1,1};
DwmExtendFrameIntoClientArea(hwnd, &borderless);

要將其關閉,請恢復默認邊距MARGINS windowed = {0,0,0,0}; 也許扔進一個SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED | SWP_ASYNCWINDOWPOS | SWP_NOSIZE | SWP_NOMOVE ); 另外,要確保重繪框架。

但是,這似乎不適用於所有窗口樣式,顯然您的窗口樣式不能包含標題欄。 標題欄工作正常,添加一個似乎可以啟用最小化動畫。

我得到陰影的最簡單的窗口樣式是WS_POPUP | WS_THICKFRAME WS_POPUP | WS_THICKFRAME ,也可以獲得aero快照,最大化,最小化和平滑最小化我使用的動畫WS_POPUP | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION WS_POPUP | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION WS_POPUP | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION

通過DwmSetWindowAttribute更改DWMWA_NCRENDERING_POLICYDWMWA_ALLOW_NCPAINT似乎不是必需的,默認設置似乎有效。

需要注意的一點是: DwmExtendFrameIntoClientArea正如名稱所示,所以如果您將帶有Alpha通道的圖像直接繪制到客戶區(例如使用opengl,direct3d / 2d),則可以通過它看到一個小框架:

無邊框窗口與陰影和框架顯示在客戶區

因此,您可能必須在透明元素后面放置一個非透明的小部件,畫筆或其他東西。

如果一切順利,它應該是這樣的:

在此輸入圖像描述

這是一個小例子項目 ,F11切換無邊框/窗口模式,F12打開和關閉無邊框陰影。

感謝melak47的回答。

對於正在尋找C ++ / Qt示例的人來說,這個GitHub功能可以像基於melak47代碼的魅力(感謝deimos1877)一樣完成工作! https://github.com/deimos1877/BorderlessWindow

一定要使用visual studio編譯器(> = 2010)來獲取所需的DLL,它應該可以工作。 此示例包括aerosnap支持,無邊框窗口,最小化效果,航空陰影。

我創建了一個作為photoshop響應的。

BorderlessWindowQt-現代桂

Image True Borderless WindowQt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM