1、MFC概述nMFC与应用程序框架 n封装了大量的Windows APIn定义了一套完整的Windows应用程序模型 n程序框架 1MFC概述nMFC的组成 n封装Windows API的常用功能 n封装了一些常用数据结构 n包含大量的宏 n保留了一些全局函数 2MFC概述nMFC中的类 CObjectCWinThreadCWinAppCCmdTargetCFileCDCCGdiObjectCMenuCWndCViewCFramWndCDialogCDocumentCBrushCFontCPenCControlBarCStatusBarCToolBarCBitmapCPaletteCMemFil
2、eCClientDCCMemDCCArrayCList3MFC程序的特点nMFC概述 n增加了一些MFC的数据类型 n增加了MFC类库文件,如MFCXX.LIB等 nMFC类使用的头文件。如afxwin.h等 n采用面向对象的方法处理消息 n应用程序框架限定了程序的结构 n可以在MFC程序直接调用Windows API 4MFC程序的特点nMFC消息处理 在MFC中,每个窗口由一个窗口对象负责管理,发给窗口的每一个消息由该窗口对象的一个专门的成员函数进行处理。n运行模式 CWinApp对象CWnd对象其它对象消息消息消息创建创建消息系统5简单的MFC程序介绍n开始之前#include/头文件6
3、简单的MFC程序介绍n派生应用程序类 class C0201App:public CWinApp public:virtual BOOL InitInstance();7简单的MFC程序介绍n派生窗口类 class C0201Window:public CFrameWnd public:C0201Window();void MyPrint(HWND hWnd);DECLARE_MESSAGE_MAP()public:void OnPaint();8简单的MFC程序介绍n建立窗口 n窗口父类的Create成员函数Create(LPCTSTR lpszClassName,/窗口使用的窗口类的名称L
4、PCTSTR lpszWindowName,/窗口标题DWORD dwStyle=WS_OVERLAPPEDWINDOW,/窗口的风格constRECT&rect=rectDefault,/窗口的大小个位置CWnd*pParentWnd=NULL,/父窗口指针LPCTSTR lpszMenuName=NULL,/使用的菜单资源DWORD dwExStyle=0,/窗口扩展的风格属性CCreateContext*pContext=NULL)/文档视图使用n窗口类的构造函数创建窗口C0201Window:C0201Window()Create(NULL,Windows编程技术02章01例,WS_O
5、VERLAPPEDWINDOW,CRect(0,0,350,250);9简单的MFC程序介绍n创建窗口对象BOOL C0201App:InitInstance()m_pMainWnd=new C0201Window;m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();return TRUE;10简单的MFC程序介绍n处理消息n消息映射 BEGIN_MESSAGE_MAP(C0201Window,CFrameWnd)ON_WM_PAINT()END_MESSAGE_MAP()n消息处理函数void C0201Window:MyP
6、rint(HWND hWnd)PAINTSTRUCT ps;HDC hdc;hdc=:BeginPaint(hWnd,&ps);:TextOut(hdc,100,100,手工的编写MFC程序!,lstrlen(手工的编写MFC程序);:EndPaint(hWnd,&ps);n建立MFC应用程序对象 C0201App o0201App;11上机步骤 n建立项目 n进入开发环境。n新建项目。n修改项目选项。n添加程序文件。n编辑程序。n修改项目属性 程序编辑完成后,需要手工设置与MFC类库的连接。在开发环境的类视图空白区域点鼠标右键,在弹出菜单上选“属性命令”,在项目的属性页将“项目默认值”框中的
7、“MFC的使用”栏的内容改为“在共享DLL中使用MFC”。n调试运行12上机步骤 n使用资源 n打开资源视图 选择菜单“视图/资源视图”可以打开资源视图 n建立图标资源 在”类视图”中空白区域点击鼠标右键显示弹出菜单,在菜单中选择“添加资源”命令,在“添加资源”对话框中的“资源类型”栏选择“Icon”并选择“新建”按钮.n在程序中使用图标资源 BOOL C0201App:InitInstance().HICON hIcon=LoadIcon(IDI_ICON1);m_pMainWnd-SetIcon(hIcon,FALSE);13功能扩展 nWM_SIZE消息 在MFC的CWnd窗口类中定义的
8、WM_SIZE消息处理成员函数为OnSize,用户重载该函数可以实现WM_SIZE消息的处理。afx_msg void OnSize(UINT nType,int cx,int cy);其中afx_msg只是一个宏这是一个消息响应函数,通常可以省略。参数nType相当于WM_SIZE消息中的wParam参数,说明窗口调整大小的类型,其值参考表2-1 窗口调整大小的类型。n参数cx说明调整窗口的宽度。n参数cy说明调整窗口的高度。14功能扩展 nAfxMessageBox函数 全局函数AfxMessageBox,它的用法与MessageBox相似。int AfxMessageBox(LPCTST
9、R lpszText,/表示在消息框内部显示的文本UINT nType=MB_OK,/指定按钮的风格UINT nIDHelp=0/帮助ID,0使用程序的默认帮助);参数nType指定AfxMessageBox窗口的风格,其值与MessageBox中nType参数含义相同,AfxMessageBox返回值也与MessageBox函数相同。15使用资源 n建立图标资源 1)打开资源视图2)添加图标资源n在程序中使用图标资源1)首先包含资源头文件:#01.#include resource.h2)修改C0201App:InitInstance(),为程序窗口指定新图标#01.BOOL C0201Ap
10、p:InitInstance()#02.#03.#04.HICON hIcon=LoadIcon(IDI_ICON1);/从程序资源文件中加载图标资源#05.m_pMainWnd-SetIcon(hIcon,FALSE);/为窗口指定一个小图标#06.m_pMainWnd-SetIcon(hIcon,TRUE);/为窗口指定一个大图标#07.16习题n1.简述什么是MFC程序框架,有什么作用。n2.简述MFC类库的组成。n3.比较MFC程序和Windows API程序在程序结构上的区别。n4.比较MFC程序和Windows API程序在处理消息方法上的区别。n5.将本章2.3中的例子上机运行。n6.请思考如何将2.3中的例子程序全屏幕运行。n7.请思考如何改变2.3中的例子程序的标题。n8.修改2.3中的例子程序,使窗口内文字信息始终显示在窗口中部n9.使用“记事本”在磁盘上建立一文本文件,修改2.3中的例子程序,使其能显示该文件内容,如果文字内容超过一行,每行撑满程序窗口进行显示并自动换行。17