我们可以将CMFCVisualManager与基于对话框的应用程序一起使用吗?

时间:2020-03-05 18:56:02  来源:igfitidea点击:

我们可以将CMFCVisualManager与基于对话框的应用程序一起使用来更改应用程序的外观吗?如果是这样,怎么做?

想法是使用随MSVC 2008一起发布的MFC Feature Pack更改控件(如按钮)的形状,颜色等。

解决方案

回答

不,不能做,至少在谈论Feature Pack版本时不能。 BCGSoft库的版本10确实具有此功能,请参见例如:http://www.bcgsoft.com/bcgcontrolbarpro-versions.htm和http://www.bcgsoft.com/images/SkinnedBuiltInDlgs.jpg。 MFC功能包或者多或者少是BCGSoft库的早期版本,MS从它们那里购买了许可证。

回答

我们需要将"通用控件"清单添加到项目资源中。这是清单文件的代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
 version="1.0.0.0"
 processorArchitecture="X86"
 name="Program Name"
 type="win32"
/>
<description>Description of Program</description>
<dependency>
 <dependentAssembly>
 <assemblyIdentity
   type="win32"
   name="Microsoft.Windows.Common-Controls"
   version="6.0.0.0"
   processorArchitecture="X86"
   publicKeyToken="6595b64144ccf1df"
   language="*"
 />
 </dependentAssembly>
</dependency>
</assembly>

回答

我认为我们可以通过在基本CDialog上实现OnApplicationLook来拥有一些MFC功能包功能(请选中此页上的步骤4)。最好实现整个OnApplicationLook方法,但是我们只需将其添加到OnInitDialog中就可以测试应用程序:

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
CDockingManager::SetDockingMode(DT_SMART);
RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);