在默认情况下SDI的风格是传统界面的,如果要修改为Office2007风格,就需要用到到几个Ex的对象了,比如CFrameWndEx、CWinAppEx这两个类,修改很简单,只需要将CFrameWnd和CWinApp直接修改为CFrameWndEx、CWinAppEx即可,注意的是在类的实现里面一定要修改IMPLEMENT_DYNCREATE(CBridgeWindow, CFrameWndEx)这一句,否则MFC是不能够自己检测到CBridgeWindow类继承自CFrameWndEx,而是还认为继承自CFrameWnd。微软的官方文档为
主要为两个地方修改代码
BOOL CBridgeApp::InitInstance()
{
/* CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CBridgeWindow);
//CBridgeWindow必须有一个缺省构造函数
CObject* pObject = pRuntimeClass->CreateObject();
//用IsKindOf检测是否是CBridgeWindow类的实例
ASSERT(pObject->IsKindOf(RUNTIME_CLASS(CBridgeWindow)));
m_pMainWnd =(CWnd *) pObject;*/
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。此函数是为使用控件所必需的,但是暂时我们用不到,屏蔽掉
InitCtrls.dwICC = ICC_WIN95_CLASSES;
// InitCommonControlsEx(&InitCtrls);
// CWinAppEx::InitInstance();
// 初始化 OLE 库,必须添加Ole支持
if (!AfxOleInit())
{
AfxMessageBox("OLE init Error");
return FALSE;
}
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,
RUNTIME_CLASS(CBridgeDoc),
RUNTIME_CLASS(CBridgeWindow), // main SDI frame window
RUNTIME_CLASS(CBridgeView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
// 分析标准 shell 命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
SetRegistryKey(_T("最简SDI模拟"));
//LoadStdProfileSettings(0); // 加载标准 INI 文件选项(包括 MRU)
// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE;
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd->UpdateWindow();
return TRUE;
}
|
下面就是框架类了,所有的风格控制均在框架类里面实现,处理Create消息,添加OnCreate函数
int CBridgeWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
// 基于持久值设置视觉管理器和样式
//下面几行代码是设置程序风格的,SetStyle里面我是保留了一种风格
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
CDockingManager::SetDockingMode(DT_SMART);
m_wndRibbonBar.SetWindows7Look(false);
RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
// 创建窗口
m_wndRibbonBar.Create(this);
// 载入ribbon资源,在这里我们需要提前创建这样一个资源
m_wndRibbonBar.LoadFromResource(IDR_RIBBON);
// 启用 Visual Studio 2005 样式停靠窗口行为
// CDockingManager::SetDockingMode(DT_SMART);
// 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
// EnableAutoHidePanes(CBRS_ALIGN_ANY);
// 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
// EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
return 0;
}
|
需要注意的就是我们要创建一个ribbon的资源这样既可生成一个office2007风格的程序空框架,下面就在添加又有的功能
阅读(3110) | 评论(0) | 转发(0) |