2010-12-13 52 views
2

HI理順圓角窗口四角

我已經創建了使用Windows API圓角邊緣的窗口調用CreateRoundRgn然而與在的SetWindowRgn圓角並不順利,因爲說與GDI +繪製一個圓角矩形。無論如何平滑窗口角落?

procedure TPBSDashboardPanel.DefineWindowRegion; 
var 
    WindowRegion: HRGN; 
begin 
    if Assigned(Parent) then 
    begin 
    WindowRegion := CreateRoundRectRgn(0, 0, Width, Height, 20, 20); 

    SetWindowRgn(Handle, WindowRegion, True); 
    end; 
end; 

回答

3

也許使用帶alpha透明度的位圖來模擬抗鋸齒以及略大的圓角區域,以允許Windows進行命中測試。

這裏的問題是,Win32 GDI使用區域進行命中測試,因此當繪製區域中的每個點都具有整數邏輯單元座標時,這樣在進行命中測試時,可以知道它是在區域外部還是在區域內部。

上帝保佑

PS:據我所知是沒有定義的一個窗口,這將使窗口邊框與抗鋸齒渲染,和Win32只支持別名窗口中使用的實際區域的方式。 Windows 7中的WDM模糊了邊界,但我認爲這是陰影,而不是模糊的實際區域。

0

我不是這方面的專家,但我確實知道GDI +支持反鋸齒,而GDI不支持。沒有抗鋸齒功能,圓角不會看起來光滑。

5

如果你想畫一個主題矩形,檢查this link. 要渲染(半)透明位圖,什麼(我猜的)會是你的目標,看看this function. 對於這兩者的功能使用,讓我知道或激勵自己使用Google。