您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用来更改应用程序的外观吗?如果是这样,它是如何完成的?
这个想法是使用随 MSVC 2008 发布的 MFC 功能包来更改控件的形状、颜色等,例如按钮。
您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用来更改应用程序的外观吗?如果是这样,它是如何完成的?
这个想法是使用随 MSVC 2008 发布的 MFC 功能包来更改控件的形状、颜色等,例如按钮。
不,做不到,至少在您谈论 Feature Pack 版本时不能。BCGSoft 库的第 10 版确实具有此功能,例如参见:http ://www.bcgsoft.com/bcgcontrolbarpro-versions.htm和http://www.bcgsoft.com/images/SkinnedBuiltInDlgs.jpg。MFC 功能包或多或少是 BCGSoft 库的先前版本,MS 从他们那里购买了许可证。
您需要将 Common Controls 清单添加到您的项目资源中。这是清单文件的代码:
<?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>
OnApplicationLook
我认为您可以通过在您的基础上实现一些 MFC 功能包功能CDialog
(检查此页面上的第 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);
这是启用视觉样式的最少代码量。您应该能够轻松地将 CDialog 弹出到框架中。IDR_MAINFRAME 是一个菜单资源。
class CMFCApplication2Dlg : public CFrameWndEx
{
CMFCMenuBar bar;
public:
CMFCApplication2Dlg() : CFrameWndEx()
{
LoadFrame(IDR_MAINFRAME);
bar.Create(this);
}
};
class CMFCApplication2App : public CWinAppEx
{
public:
virtual BOOL InitInstance()
{
CWinAppEx::InitInstance();
CMFCVisualManagerOffice2007::SetStyle(
CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
CMFCVisualManager::SetDefaultManager(
RUNTIME_CLASS(CMFCVisualManagerOffice2007));
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
m_pMainWnd = new CMFCApplication2Dlg();
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
};
CMFCApplication2App theApp;