带Vista风格的CMFCButton

dje*_*dot 5 c++ mfc mfc-feature-pack

我似乎无法在对话框应用程序中以Vista样式显示CMFCButton.我正在使用带有MFC功能包的VS2008.

以下是重现我的问题的一些步骤:

  • 创建一个新的MFC项目;
  • 指定基于对话框的项目.
  • 在主对话框中添加两个按钮.
  • 为每个按钮添加一个变量.将其中一个变量设为CButton,另一个变量为CMFCButton.
  • 编译并运行.

测试应用程序图片http://img7.imageshack.us/img7/3/testapp.png

如您所见,CButton具有正确的样式,但CMFCButton没有.

我在这里缺少什么?

Ste*_*die 8

CMFCButton具有BS_OWNERDRAW风格默认设置-你可以将其删除OnInitDialog()您的对话框:

mfcButton.ModifyStyle(BS_OWNERDRAW, 0, 0);
Run Code Online (Sandbox Code Playgroud)

但是,删除所有者绘制样式会导致CMFCButton的许多方法变得无用(例如SetTextColor).您可以通过设置可视化管理器来使用当前窗口主题获取要渲染的按钮:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
Run Code Online (Sandbox Code Playgroud)

这样做而不是ModifyStyle上面的操作,导致按钮符合默认样式但仍具有较新的渲染功能.