我注意到Windows已经使Windows的非客户区域自动成为主题--Windows Aero的颜色。我认为这是一个好主意,因为它使主题在各个程序和一个更好的界面上保持一致。作为一个狡猾的人,我渴望在这里颠覆微软的意图,并获得使用我的程序设置的颜色而不是操作系统设置的GUI。有没有办法在非客户区域更改Windows Aero颜色?
想法?
我注意到Windows已经使Windows的非客户区域自动成为主题--Windows Aero的颜色。我认为这是一个好主意,因为它使主题在各个程序和一个更好的界面上保持一致。作为一个狡猾的人,我渴望在这里颠覆微软的意图,并获得使用我的程序设置的颜色而不是操作系统设置的GUI。有没有办法在非客户区域更改Windows Aero颜色?
想法?
是的,这是可能的,但你需要使用未公开的功能。这意味着您的程序可能无法在未来版本的Windows上运行,或者即使发布了Service Pack或其他更新。
如果您愿意冒这个风险,this blog post has full details并且反向设计了这些功能以及如何使用它们。它包括的可以达到什么样的一个截图:
基本上有你需要两个功能:DwmGetColorizationParameters
和DwmSetColorizationParameters
。结构传递给他们和方法原型(在Delphi,但我敢肯定,你可以转化为C++,如果这是你使用的是什么):
tagCOLORIZATIONPARAMS = record
clrColor : COLORREF; //ColorizationColor
clrAftGlow : COLORREF; //ColorizationAfterglow
nIntensity : UINT; //ColorizationColorBalance -> 0-100
clrAftGlowBal : UINT; //ColorizationAfterglowBalance
clrBlurBal : UINT; //ColorizationBlurBalance
clrGlassReflInt : UINT; //ColorizationGlassReflectionIntensity
fOpaque : BOOL;
end;
COLORIZATIONPARAMS=tagCOLORIZATIONPARAMS;
TColorizationParams=COLORIZATIONPARAMS;
PColorizationParams=^TColorizationParams;
TDwmGetColorizationParameters = procedure(out parameters :TColorizationParams); stdcall;
TDwmSetColorizationParameters = procedure(parameters :PColorizationParams; unknown:BOOL); stdcall;
如果你不习惯这种语法,顶部分定义了一个结构,底部的两行是方法原型。 ^表示一个指针,所以Set方法正在接受一个指向结构体的指针。 out
is tricky并且意味着该方法也正在指向该结构。 procedure
表示它返回void。如果您仍然在阅读时遇到困难,请留下评论,我会将其翻译为C.
您应该能够弄清楚您需要的所有内容,但是如果您想了解更多详细信息或使用它的示例,请read the blog post 。 (这是一个很好的帖子,值得交通。)