MFC 2008,新的用户界面 - 1 - 框架窗口
来源:互联网 发布:客户经理好用软件 编辑:程序博客网 时间:2024/06/06 14:25
早听说Visual C++ 2008 FR1提供了很多新的功能,其中就包括MFC的新界面。现在拿到Visual Studio 2008 SP1简体中文版,急不可待的用了一下。果然,在向导中,就可以在工程里加入modern风格的界面了,可以模仿Office和Visual Stidio的界面风格。
阅读向导生成的代码发现,MFC用了一套新的框架类:
SDI:CFrameWndEx
MDI:CMDIFrameWndEx,CMDIChildWndEx
让我们先从框架类看起吧。
CFrameWndEx和CMDIFrameWndEx都是通过类CFrameImpl实现具体的框架绘制操作。CFrameWndEx和CMDIFrameWndEx都对我们熟悉的消息做了处理:
WM_NCHITTEST
WM_NCCALCSIZE
WM_NCPAINT
WM_NCMOUSEMOVE
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_ACTIVATEAPP
WM_MOUSEMOVE
WM_SIZE
WM_SIZING
......
这些消息的处理又是调用CFrameImpl完成的。
MFC能显示多种风格的界面,这是如何实现的呢?看到向导创建了如下的代码:
void CMainFrame::OnApplicationLook(UINT id){CWaitCursor wait;theApp.m_nAppLook = id;switch (theApp.m_nAppLook){case ID_VIEW_APPLOOK_WIN_2000:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));break;case ID_VIEW_APPLOOK_OFF_XP:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));break;case ID_VIEW_APPLOOK_WIN_XP:CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));break;case ID_VIEW_APPLOOK_OFF_2003:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));CDockingManager::SetDockingMode(DT_SMART);break;case ID_VIEW_APPLOOK_VS_2005:CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));CDockingManager::SetDockingMode(DT_SMART);break;default:switch (theApp.m_nAppLook){case ID_VIEW_APPLOOK_OFF_2007_BLUE:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);break;case ID_VIEW_APPLOOK_OFF_2007_BLACK:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);break;case ID_VIEW_APPLOOK_OFF_2007_SILVER:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);break;case ID_VIEW_APPLOOK_OFF_2007_AQUA:CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);break;}CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));CDockingManager::SetDockingMode(DT_SMART);}RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);}
这段代码是切换界面风格的命令处理函数。CMFCVisualManager是UI界面的基类(事实上,他还有一个基类:CMFCBaseVisualManager),他提供类似于Windows2000风格的UI界面。其他几种UI界面类都是从它直接或间接派生的。SetDefaultManager用来设置不同的UI界面风格类。从上面的代码可以看出CMFCVisualManager是一个单件,一个程序只需要一个这样的类就可以了。
AFX_IMPORT_DATA static CMFCVisualManager* m_pVisManager;
当设置新界面风格时,SetDefaultManager销毁原来的界面风格类,创建新的界面风格类。界面风格类通过(RUNTIME_CLASS创建,这是一种工厂方法。MFC很早就使用这种方法创建对象了,比C++的RTTI出来得还早。
CMFCVisualManager提供了很多类似于OnNcPaint的虚函数,这些函数不用说就是用来绘制界面的。CFrameImpl正是调用CMFCVisualManager来实现界面绘制工作的,例如:
BOOL CFrameImpl::OnNcPaint(){ASSERT_VALID(m_pFrame);if (!IsOwnerDrawCaption() || g_bInSettingChange){return FALSE;}return CMFCVisualManager::GetInstance()->OnNcPaint(m_pFrame, m_lstCaptionSysButtons, m_rectRedraw);}
- MFC 2008,新的用户界面(1)- 框架窗口
- MFC 2008,新的用户界面 - 1 - 框架窗口
- MFC 2008,新的用户界面
- MFC 2008,新的用户界面(2)- 应用程序类
- MFC 2008,新的用户界面 - 2 - 应用程序类
- MFC 2008,新的用户界面 - 3 - 菜单栏、工具栏和状态栏
- MFC 2008,新的用户界面(3)- 菜单栏、工具栏和状态栏
- MFC 窗口基本框架
- MFC 用户界面线程:界面线程的退出 窗口关闭的流程
- VS2012 + MFC 创建新的对话框窗口(初学)
- MFC中通过组合键打开新的窗口
- MFC用户界面多线程实例1
- MFC框架的窗口、文档、视的创建过程
- MFC窗口系统下的OSG简单框架
- 框架窗口和文档、视图的交互(MFC)
- 最简单的MFC窗口创建_框架
- MFC文档、视图、框架窗口、文档模板之间的相互关系
- MFC单文档框架编程(一): 分隔窗口的实现
- 利用Windows7自带Diskpart命令分区后再安装系统
- 块I/O调度程序
- 杭电OJ题1018 Big Number 解题报告
- css显示倒置柱状图,认识bottom属性
- java异常收集与整理
- MFC 2008,新的用户界面 - 1 - 框架窗口
- 注重纪律——读《浮现式设计》有感
- 数据结构:散列表(哈希表)
- MFC 2008,新的用户界面 - 2 - 应用程序类
- MFC 2008,新的用户界面 - 3 - 菜单栏、工具栏和状态栏
- uva 112 TreeSumming
- 技术人员的未来:做技术还是做管理?
- bootClassPath
- android 自适应 多屏幕支持