如何让WinAPI C程序使用Windows 7基础版及经典风格标题栏而非Windows 10标题栏
如何让WinAPI C程序使用Windows 7基础版及经典风格标题栏而非Windows 10标题栏
嘿,刚好我之前折腾过这个需求!不用费劲写自定义标题栏就能实现你要的效果——你手动开兼容性模式看到的样式,其实可以直接在代码里配置,让程序默认就用老风格的标题栏。
给你分享两个靠谱的方法:
1. 用应用程序清单固定指定视觉风格
这是最标准、最稳定的方式,相当于把兼容性模式的设置“写死”在程序里,用户不用手动改属性。
你只需要创建一个XML格式的应用程序清单文件,比如命名为app.manifest,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <!-- 指定程序兼容Windows 7,系统会自动套用Win7的标题栏样式 --> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> </application> </compatibility> <!-- 引入通用控件库,确保风格生效 --> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
之后把这个清单文件关联到你的C项目里就行:比如在Visual Studio中,右键项目→属性→链接器→清单文件→输入和输出,把“附加清单文件”设置为你刚才创建的app.manifest路径。编译后程序默认就会用Win7风格的标题栏了。
2. 动态设置纯经典标题栏(无Aero效果)
如果你想要更老的那种灰底经典标题栏(类似Windows XP/98的样式),可以在窗口创建完成后调用WinAPI关掉主题:
首先要包含头文件和链接库:
#include <uxtheme.h> #pragma comment(lib, "uxtheme.lib")
然后在窗口创建成功后,调用SetWindowTheme函数:
// hwnd是你的窗口句柄 SetWindowTheme(hwnd, L"", L"");
这样窗口就会完全脱离当前系统的主题,回到最基础的经典视觉样式,标题栏也会变成老式的样子。
其实你手动开兼容性模式,本质上就是系统自动给程序临时套用了类似的清单配置,所以我们提前在代码里做好设置,用户打开程序就能直接看到老风格的界面啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

