Можно ли использовать CMFCVisualManager с диалоговым приложением для изменения внешнего вида приложений? Если да, то как это делается?
Идея состоит в том, чтобы изменить форму, цвет и т. д. Элементов управления, таких как кнопки, с помощью пакета функций MFC, выпущенного вместе с MSVC 2008.





Нет, невозможно, по крайней мере, если вы говорите о версии Feature Pack. Версия 10 библиотек BCGSoft действительно имеет эту функциональность, см., Например: 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>
Я думаю, вы можете получить некоторые функции MFC-feature-pack, реализовав OnApplicationLook на вашей базе 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;
Это позволит включить только Common Controls V6 (также известный как Windows XP). То, что было после OP, было `` тематическим '' видом (стиль Office 2007, VS2005 или любой другой, который включен в MFC Next.