二、MFC编程综述
采用MFC开发Windows程序之所以能够大幅度提高开发速度和效率主要是因为MFC在类层次封装了大量Windows SDK函数和典型Windows应用的缺省处理,这样,用户只需要较少的编程就可以实现自己的开发任务。如果在MFC基础上再配合Visual C++提供的AppWizard、ClassWizard和AppStudio工具那么更可以大幅度加快开发进程。MFC提供大量的基类供程序员使用,常见的如CWinApp类、CFrameWnd类、CMDIFrameWnd类、CMDIChildWnd类、CView类、CDC类和CDocument类等等。通过从这些基类中派生出用户自己的类,然后重载特殊的几个函数就可以生成一个独立的应用程序。可以说,采用MFC编写Windows应用程序是非常方便的,虽然其学习过程并不简单,但是其提供的灵活高效性足以使任何Windows程序开发人员为之付出努力。如果用户不曾使用过MFC,那么用户可以通过附录中所列的参考书去学习MFC的强大功能。
采用MFC应用框架产生的应用程序使用了标准化的结构,因而使得采用MFC编写的程序的在不同平台上的移植变得非常容易,事实上,MFC的16位和32位版本之间差别很小。MFC提供的标准化结构是经过众多专家分析调研后总结编写出来的,一般情况下可以满足绝大多数用户的要求,但有时用户也可以通过重载一些函数来修改其缺省的风格从而实现自己特有的风格,如自定义应用图表和灰色背景等。在MFC提供的文档视结构中,文档、视和资源之间的联系是通过定义文档模板来实现的,如:
m_pSimuTemplate = new CMultiDocTemplate( IDR_SIMUTYPE, RUNTIME_CLASS(CSimuDoc), RUNTIME_CLASS(CMyChild), // Derived MDI child frame RUNTIME_CLASS(CSimuView)); |
上中第一项IDR_SIMUTYPE就包括了视口的菜单,加速键和图表等资源,如果用户使用AppWizard来产生的应用基本框架,那么其也同时产生了缺省的图标,如果用户不满意缺省图标(实际上用户很少满足于缺省图标),只需要将缺省图标删除,然后编辑或者直接引入一个新的图标,在存储这一图标时只需要使用与被删除图标同样的ID即可实现替代。
熟悉Windows程序开发的人都知道,在Windows上通过使用灰色背景可以增强应用程序的视觉效果,曾有人戏称,灰色是图形界面永恒的颜色。使用MFC产生的应用程序的背景缺省为白色,如果用户希望改变成灰色或者其它颜色,那就需要使用单独处理,解决的办法很多,如在每次视口的OnPaint()事件中采用灰色刷子人为填充背景,但是这不是最好的办法。笔者发现最好的办法就是采用AfxRegisterWndClass()函数注册一个使用灰色背景刷的新的窗口类,这需要重载PreCreateWindow()函数来实现这一点,如下程序代码片段所示:
BOOL CSimuView::PreCreateWindow(CREATESTRUCT& cs) { HBRUSH hbkbrush=CreateSolidBrush(RGB(192,192,192));//创建灰色背景刷 LPCSTR lpMyOwnClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW|CS_OWNDC,0,hbkbrush);//注册新类 cs.lpszClass=lpMyOwnClass;//修改缺省的类风格
return TRUE; } |
采用这种方法速度最快,也最省力。同时,还可以在PreCreateWindow()函数定义所希望的任何窗口风格,如窗口大小,光标式样等。