[英]How to change Form Border to Windows Basic instead of Aero Style?
我想知道是否可能,如果可以,如何将表单边框样式更改为Windows Basic而不是Aero主题? 显然,首先考虑Aero是否启用,如果不启用,则无需尝试更改边框样式。
所以代替:
我们会:(模拟图像)
MDI应用程序已经为子表单执行此操作,但我不想要或不需要MDI应用程序。 我试着查看Vcl.Forms的来源,看看我是否能找到任何相关但我无法 - 我可能是错的但我实际上认为绘制MDI表单的方式是由Windows而不是Delphi决定的。
DSiWin32包含一些与Aero相关的功能,例如确定Aero是否已启用,以及能够启用和禁用Aero - 但这似乎是系统范围的更改,而不是每个窗体/窗口基础,它也导致屏幕延迟,而主题改变,这是不好的。
我不确定在这一点上去哪里。 我可能忽略了一些简单的事情吗? 我们是否需要创建和覆盖我们自己的TForm以及一些特定的标志等来实现这一点,或者可能有一种方法可以在任何时候改变表单样式,例如为表单启用/禁用Aero?
简单地说,我想知道是否可以不使用MDI应用程序,我们是否可以将任何窗体/窗口边框更改为Windows Basic主题,只要首先启用Aero?
调用DwmSetWindowAttribute
传递DWMWA_NCRENDERING_POLICY
属性,其值为DWMNCRP_DISABLED
。
type
TForm1 = class(TForm)
protected
procedure CreateWnd; override;
end;
procedure TForm1.CreateWnd;
var
Policy: Integer;
begin
inherited;
Policy := DWMNCRP_DISABLED;
DwmSetWindowAttribute(WindowHandle, DWMWA_NCRENDERING_POLICY, @Policy,
SizeOf(Policy));
end;
我在这里忽略了错误检查。 您可以确定响应错误是值得的。 我也没有做任何测试操作系统是否支持这个函数调用,但如果你需要支持XP,你也可以选择这样做。
请注意, CreateWnd
是调用DwmSetWindowAttribute
的正确位置。 窗口句柄是在CreateWnd
创建的,我们希望尽快应用此策略。 将代码放在CreateWnd
也可以使其在重新创建时更加强大。
普通航空表格:
调用DwmSetWindowAttribute
:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.