【问题标题】:Smooth out rounded window corners平滑圆角窗角
【发布时间】:2010-12-13 03:28:54
【问题描述】:

我使用 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;

【问题讨论】:

    标签: windows delphi


    【解决方案1】:

    如果您想绘制主题矩形,请查看this link. 要渲染(半)透明位图,(我猜)你的目标是什么,请查看this function. 要使用这两个功能,请告诉我或使用 Google 启发您自己。

    【讨论】:

      【解决方案2】:

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

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

      上帝保佑

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2019-02-17
          • 1970-01-01
          • 2014-01-12
          • 1970-01-01
          • 1970-01-01
          • 2014-01-28
          • 2019-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多