圆形窗角平滑

时间:2010-12-13 03:28:54

标签: windows delphi

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 个答案:

答案 0 :(得分:5)

如果您想绘制主题矩形,请检查this link. 要渲染(半)透明位图,我猜测是什么(我猜),请查看this function. 要使用这两种功能,请让我知道或激励您使用Google。

答案 1 :(得分:3)

可能使用具有Alpha透明度的位图来模拟抗锯齿以及稍微更大的圆形区域,以允许Windows进行命中测试。

这里的问题是Win32 GDI使用区域进行命中测试,因此当绘制区域中的每个点都具有整数逻辑单元坐标时,因此当经过命中测试时,可以知道区域外部或内部。

上帝保佑

PS:AFAIK无法定义窗口使用的实际区域,这将使窗口边框呈现抗锯齿,而Win32仅支持别名窗口。 Windows 7中的WDM模糊了边框,但我认为这是阴影,而不是绘制模糊的实际区域。

答案 2 :(得分:0)

我不是这方面的专家,但我知道GDI +支持抗锯齿,而GDI则不支持。没有抗锯齿,圆角看起来不会很光滑。