我希望让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的其他清单,则可以在目标计算机上安装应用程序时安装不同的清单文件。即您的安装程序将检查操作系统版本并安装匹配的清单。