在VS2008编译的MFC应用程序中关闭XP主题

时间:2009-03-11 15:48:58

标签: c++ windows mfc

我们刚刚将我们的C ++ MFC应用程序从VS2005切换到VS2008。不幸的是,这样做我们的UI有外观问题,比如组框显示蓝色而不是黑色,属性对话框有白色背景等。我认为在VS2008中,MFC已经改为尊重操作系统主题(在我的情况下XP默认主题)。不幸的是,更改我们所有的控件和我们的自定义工具栏以使应用程序再次看起来不错,需要大量的工作。

那么,有没有人知道代码是否有办法将应用程序重新置于VS2005模式?我找到了以下代码

typedef void (WINAPI *tSetThemeAppProperties)(  DWORD );

tSetThemeAppProperties pSetThemeAppProperties=0;
HINSTANCE  handle  = ::LoadLibrary("UxTheme.dll");

if (handle) 
    pSetThemeAppProperties = (tSetThemeAppProperties) ::GetProcAddress(handle,"SetThemeAppProperties"); 


if ( pSetThemeAppProperties)
{
    // call function
    pSetThemeAppProperties(0/*dwFlags*/);
}
::FreeLibrary(handle);

这会阻止XP主题被拾取,但会关闭所有主题并使应用程序看起来比在VS2005中更加过时。

感谢

2 个答案:

答案 0 :(得分:2)

可能VS2008在项目中包含Manifest文件,该文件加载版本6.0 comctl32.dll而不是5.82 comctl32.dll ...都附带Windows XP及更新版本。

答案 1 :(得分:1)

在“属性 - >配置属性 - >链接器 - >清单文件”下,将“生成清单”选项设置为“否”。

然后根据需要添加您自己的清单文件,并在“属性 - >配置属性 - >清单工具 - >输入和输出”,“输入资源清单”下进行设置。

如果你添加自己的清单文件,它确实没有包含对commctl32 v6的引用。