Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 磨平窗户的圆角_Windows_Delphi - Fatal编程技术网

Windows 磨平窗户的圆角

Windows 磨平窗户的圆角,windows,delphi,Windows,Delphi,嗨 我已经使用windows API调用CreateRoundRgn和SetWindowRgn创建了一个具有圆角的窗口,但是圆角不如用GDI+绘制的圆角矩形平滑。有没有办法把窗户的角弄光滑 procedure TPBSDashboardPanel.DefineWindowRegion; var WindowRegion: HRGN; begin if Assigned(Parent) then begin WindowRegion := CreateRoundRectRgn(

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

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

除了允许窗口进行命中测试的稍大圆角区域外,还可以使用具有alpha透明度的位图来模拟消除混叠

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

上帝保佑


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

如果要绘制主题矩形,请选中 要渲染(半透明)位图,我想您的目标是什么,请查看 对于这两个功能的使用,请让我知道或启发你自己使用谷歌