我希望让vista / win7使用Aero风格的窗口,而XP用户使用普通的窗口风格(如何获得Windows XP stlye而不是win95风格?)

这个想法是这样的:

OSVERSIONINFOEX osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((OSVERSIONINFO*)&osvi);
if (osvi.dwMajorVersion > 5) {
               #pragma comment(linker,"/manifestdependency:\"type='win32' "\
               "name='Microsoft.Windows.Common-Controls' "\
               "version='6.0.0.0' "\
               "processorArchitecture='x86' "\
               "publicKeyToken='6595b64144ccf1df' "\
               "language='*' "\
               "\"")
}


现在,无论if语句是true还是false,#pragma都会被执行,我想这只是#pragma的工​​作方式。当然,还有其他方法可以使它正常工作(例如#ifndef #define ... #endif我猜)

干杯

最佳答案

您正在将编译指示的编译时评估与代码的运行时执行混合在一起。显然这是行不通的。

可以在“ PutYourProgramNameHere.exe.manifest”文件中保留应用程序清单。因此,如果您需要用于XP和Vista / Win7的其他清单,则可以在目标计算机上安装应用程序时安装不同的清单文件。即您的安装程序将检查操作系统版本并安装匹配的清单。

09-27 08:31