【问题标题】:Can you use CMFCVisualManager with a dialog based application?您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用吗?
【发布时间】:2010-09-09 12:15:30
【问题描述】:

您能否将 CMFCVisualManager 与基于对话框的应用程序一起使用来更改应用程序的外观?如果有,怎么做?

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

【问题讨论】:

    标签: mfc mfc-feature-pack


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您需要将 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>
      

      【讨论】:

      • 这只会启用 Common Controls V6(又名 Windows XP 外观)。 OP 所追求的是“主题”外观(Office 2007 风格、VS2005 或 MFC Next 中包含的任何其他风格。
      【解决方案3】:

      我认为您可以通过在您的基础 CDialog 上实现 OnApplicationLook 来获得一些 MFC 功能包功能(检查 this page 上的第 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);
      

      【讨论】:

        【解决方案4】:

        这是启用视觉样式的最少代码量。您应该能够轻松地将 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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多