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

问题描述 投票:0回答:4

您可以将

CMFCVisualManager
与基于对话框的应用程序一起使用来更改应用程序的外观吗?如果可以的话怎么办?

这个想法是使用随 MSVC 2008 发布的 MFC 功能包来更改按钮等控件的形状、颜色等。

mfc mfc-feature-pack
4个回答
2
投票

不,无法完成,至少如果您谈论的是功能包版本则不行。 BCGSoft 库的版本 10 确实具有此功能,请参阅例如: http://www.bcgsoft.com/bcgcontrolbarpro-versions.htmhttp://www.bcgsoft.com/images/SkinnedBuiltInDlgs.jpg 。 MFC功能包或多或少是BCGSoft库的早期版本,MS从他们那里购买了许可证。


0
投票

您需要将公共控件清单添加到您的项目资源中。这是清单文件的代码:

<?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>

0
投票

我认为您可以通过在基础

OnApplicationLook
上实现
CDialog
来获得一些 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);

0
投票

这是启用视觉样式的最少代码量。您应该能够轻松地将 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;
© www.soinside.com 2019 - 2024. All rights reserved.