平滑圆角窗角
Posted
技术标签:
【中文标题】平滑圆角窗角【英文标题】: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;
【问题讨论】:
【参考方案1】:如果您想绘制主题矩形,请查看this link. 要渲染(半)透明位图,(我猜)你的目标是什么,请查看this function. 要使用这两个功能,请告诉我或使用 Google 启发您自己。
【讨论】:
【参考方案2】:除了允许 Windows 进行命中测试的稍大的圆形区域之外,还可以使用具有 Alpha 透明度的位图来模拟抗锯齿。
这里的问题是 Win32 GDI 使用区域进行命中测试,因此在绘制区域中的每个点时都有整数逻辑单元坐标,因此在命中测试时可以知道它是在区域外还是在区域内。
上帝保佑
PS:AFAIK 无法定义窗口使用的实际区域,这将使窗口边框呈现抗锯齿,Win32 仅支持锯齿窗口。 Windows 7 中的 WDM 模糊了边界,但我认为这是阴影,而不是绘制模糊的实际区域。
【讨论】:
【参考方案3】:我不是这方面的专家,但我知道 GDI+ 支持抗锯齿,而 GDI 不支持。没有抗锯齿,圆角看起来不平滑。
【讨论】:
以上是关于平滑圆角窗角的主要内容,如果未能解决你的问题,请参考以下文章