首页计算机计算机软件VisualC++ 05 第5章 MFC编程基础.pptx

05 第5章 MFC编程基础.pptx

页数:40页文件大小:255.4 KB来源: VisualC++ppt课件

本课件对应课程第5章MFC编程基础,先说明MFC类库对Windows API的封装及三种应用程序结构,随后重点讲解由CWinApp与CFrameWnd构成的Mini-MFC程序结构、消息映射机制与ON_MESSAGE、ON_COMMAND两类消息映射宏的添加步骤,再演示CPaintDC、CClientDC设备环境及文字、画线、矩形、椭圆、多边形等绘图函数与画笔、画刷的用法,最后给出定时器编程与数据采集模拟实例。

第5章MFC编程基础教学重点页,聚焦Mini-MFC程序框架、消息映射机制与定时器消息MFC编程
MFC基本概念说明页,指出MFC是封装了大部分Windows API的微软基础类库
MFC类的分类说明页,区分CObject派生类与非CObject派生类两大类别
查看本课件的文字版(共 40 页,供检索与复制)

第1页:第5章教学重点

  • 教学重点1
  • Mini-MFC应用程序框架CWinApp,CFrameWnd2
  • 消息映射消息<

==> 类成员函数ON_MESSAGE()消息映射宏3、定时器消息MFC编程WM_TIMER

第2页:MFC基本概念

5.1 MFC基本概念MFC,Microsoft Foundation ClassMFC库中包含用来开发C++应用程序和Windows应用程序的一组类。

  • 这些类封装了大部分的Windows API,用来表示窗口
  • 对话框
  • 设备上下文(DC)
  • 公共GDI对象如画笔
  • 调色板
  • 控制框和其他标准的Windows部件

第3页:MFC类的分类

5.1 MFC基本概念MFC中的类可分为两种
CObject类的派生类;

非CObject派生类; (数量不多,但常用)

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。

第4页:Mini-MFC程序结构

5.1 MFC基本概念---MFC程序结构1、Mini-MFC程序结构CWinApp+CFrameWndMini-MFC程序结构中,主应用程序窗口为框架窗口,CFrameWnd派生类对象附属于应用程序的CWinApp派生类对象的m_pMainWnd成员。

第5页:基于对话框的应用程序

5.1 MFC基本概念---MFC程序结构2、基于对话框的应用程序CWinApp+CDialog基于对话框的应用程序与基于框架窗口的应用程序差别不大,只是用CDialog派生类对象代替了CFrameWnd派生类对象作为应用程序的主窗口。

第6页:文档视图应用程序

5.1 MFC基本概念---MFC程序结构3、基于文档/视图结构的应用程序文档/视图应用具有较复杂的结构,当然其功能也相应增强。 基于文档/视图结构的应用程序又可分为单文档界面(SDI)和多文档界面(MDI),后者更复杂些。

第7页:CWinApp类

5.2 Mini-MFC程序结构---CWinAppCWinApp类实现WinMain函数的功能。 MFC将Windows应用程序从开始运行、消息传递到结束运行所需的各步骤均封装在CWinApp类中,CWinApp类表示MFC应用程序的应用对象。

第8页:CWinApp派生类

5.2 Mini-MFC程序结构---CWinApp用户应该声明CWinApp派生类为全局对象。 用户从CWinApp派生了一个应用程序类之后,可以重载InitInstance成员函数来创建应用程序的主窗口对象。

第9页:CFrameWnd类

  • 5.2 Mini-MFC程序结构---CFrameWnd应用程序主窗口的功能1
  • 保存数据---数据成员2
  • 消息处理函数---成员函数

第10页:消息映射机制

5.2 Mini-MFC程序结构---消息映射消息映射本质上就是一个数组,MFC使用消息映射建立消息和类的成员函数的对应关系。

消息映射数组中存储的信息

  • 所处理的消息;
  • 消息应用的控件ID,或者ID范围;
  • 消息所传递的参数;
  • 消息所期望的返回值。

第11页:ON_MESSAGE宏

5.2 Mini-MFC程序结构---消息映射宏1、ON_MESSAGE:处理任意消息语法规则

ON_MESSAGE(ID,func)LRESULT func(WPARAM wParam,LPARAM lParam);

第12页:ON_MESSAGE宏示例

5.2 Mini-MFC程序结构---消息映射宏1、ON_MESSAGE:处理任意消息举例:ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown)

LRESULT OnLButtonDown(WPARAM wParam,LPARAM lParam);

第13页:ON_COMMAND宏

5.2 Mini-MFC程序结构---消息映射宏2、ON_COMMAND:处理WM_COMMAND消息语法规则

ON_COMMAND(ID,func)void func( ); 举例:ON_COMMAND(ID_OPER_TEST, OnOperTest)void OnOperTest ( );

第14页:消息映射添加步骤

5.2 Mini-MFC程序结构---消息映射步骤1、在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息映射宏;

BEGIN_MESSAGE_MAP(CDemoView, CView)ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown)ON_COMMAND(ID_OPER_TEST, OnOperTest)END_MESSAGE_MAP( )2、在类声明中声明成员函数; 3、在类的实现部分实现成员函数。

第15页:设备环境DC

5.3图形和文字输出---设备环境(DC)

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。

第16页:CPaintDC类

5.3图形和文字输出---CPaintDCCPaintDC封装的设备环境代表普通的窗口。 CPaintDC类的构造函数调用BeginPaint函数,析构函数调用EndPaint函数。

第17页:CClientDC类

5.3图形和文字输出---CClientDCCClientDC封装的设备环境代表窗口客户区。 CClientDC类的构造函数调用GetDC函数,析构函数调用ReleaseDC函数。

第18页:文字信息显示

5.3图形和文字输出---绘图函数1、文字信息显示BOOL TextOut(int x, int y,LPCTSTR lpszString); 在指定坐标(x, y)处显示字符串lpszString的内容,显示成功返回非0值,否则返回0。

第19页:MoveTo函数

5.3图形和文字输出---画线函数画线工作需经两步完成:首先确定线的起始端位置,这可通过调用成员函数MoveTo完成,其原型为:CPo

int MoveTo ( int x, int y ); CPoint MoveTo ( POINT point ); MoveTo将绘图位置(“看不见”)移至指定坐标处,并返回移动前的绘图位置。

第20页:LineTo函数

5.3图形和文字输出---画线函数确定了线的起点后,即可使用成员函数LineTo画线

BOOL LineTo ( int x, int y ); BOOL LineTo ( POINT point ); 其参数为线终点的坐标。

第21页:绘制矩形

5.3图形和文字输出---绘制矩形绘制矩形的成员函数为

BOOL Rectangle ( int x1, int y1, int x2, int y2 ); BOOL Rectangle ( LPCRECT lpRect ); 其参数为需要绘制的矩形的左上角坐标(x1,y1)和右下角坐标(x2, y2)。

第22页:绘制椭圆

5.3图形和文字输出---绘制椭圆该成员函数的原型为:BOOL Ellipse(int x1, int y1, int x2, int y2); BOOL Ellipse(LPCRECT lpRect); 其参数的含义为所绘椭圆的包含矩形的左上角和右下角坐标。

第23页:绘制多边形

5.3图形和文字输出---绘制多边形

BOOL Polygon ( LPPOINT lpPoints,int nCount ); 其中参数lpPoints为一LPPOINT类型的指针,可用CPoint数组(存放多边形的各顶点坐标)作为实参。参数nCount为顶点个数。

第24页:绘制多边形示例

5.3图形和文字输出---绘制多边形程序举例:CPaintDC dc(this); CPoint point [3];

point [0] = CPoint(100, 100); point [1] = CPoint(200, 100); point [2] = CPoint(200, 200); dc.Polygon(point, 3);

第25页:画笔CPen类

5.3图形和文字输出---画笔

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。

第26页:创建红色画笔

5.3图形和文字输出---画笔画笔是用来画线的工具,是CPen类的对象。 其使用方法为:1、声明画笔对象,并创建宽度为3的红色实线画笔CPen RedPen;

RedPen.CreatePen(PS_SOLID, 3, RGB(255, 0, 0));

第27页:选入与恢复画笔

5.3图形和文字输出---画笔2、使用新的画笔,保存原来的画笔以便恢复CPen *pOldPen;

pOldPen = dc.SelectObject(&RedPen); 

第28页:CreatePen成员函数

5.3图形和文字输出---画笔

CPen类的成员函数CreatePen()用于创建画笔,其原型为:BOOL CreatePen (int nPenStyle,int nWidth, COLORREF crColor); 第1个参数是画笔样式,各种虚线只有当线宽为1时有效。第2个参数为线宽,第3个参数为线的颜色,可使用RGB()宏指定。

第29页:CBrush画刷类

5.3图形和文字输出---画刷画刷是用来填充图形的工具,是CBrush类的对象,使用方法与画笔类似,也要定义画刷对象,创建画刷并保存原来的画刷,在绘图工作结束后恢复原来的画刷。

第30页:创建画刷函数

5.3图形和文字输出---画刷创建画刷的成员函数的原型为

BOOL CreateSolidBrush ( COLORREFcrColor ); 参数crColor指定了画刷的颜色。除此而外,还可以创建一个阴影风格的画刷:BOOL CreateHatchBrush ( int nIndex,COLORREF crColor ); 其中参数nIndex指定了阴影风格。

第31页:SelectObject原型

5.3图形和文字输出---画刷CDC类的SelectObject()函数原型如下

CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush );

第32页:MFC定时器消息

5.4定时器消息编程WM_TIMER消息消息号
WM_TIMER字参数:wParam ==》定时器标识长字参数:(TIMERPROC *) lParam==》定时器回调函数地址

第33页:CWnd::SetTimer

5.4定时器消息编程---

CWnd::SetTimer()功能:设置定时器UINT SetTimer(UINT nIDEvent,UINT nElapse,void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD));

第34页:CWnd::KillTimer

5.4定时器消息编程---

CWnd ::KillTimer()功能:销毁定时器BOOL KillTimer(int nIDEvent 

第35页:定时器消息映射(一)

5.4定时器消息编程---消息映射1、消息映射宏

ON_MESSAGE(WM_TIMER,OnTimer)2、消息处理函数声明LRESULT OnTimer(WPARAM wParam,LPARAM lParam);

第36页:定时器消息映射(二)

5.4定时器消息编程---消息映射3、消息处理函数实现

LRESULT CDrawWnd::OnTimer(WPARAM wParam, LPARAM lParam){ return 0;

第37页:数据采集模拟实例

5.5 Mini-MFC编程举例---数据采集模拟

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。

第38页:数据采集设计要求

5.5 Mini-MFC编程举例---数据采集模拟设计要求:1、按下CTRL键,单击鼠标左键启动采集;

  • 按下SHIFT键,单击鼠标左键停止采集;
  • 绘制网格线以确定显示区域;
  • 显示区域内显示100个数据点曲线;
  • 曲线占满窗口时曲线左移显示新数据点。

第39页:数据采集设计思想

5.5 Mini-MFC程序举例---数据采集模拟设计思想:WM_LBUTTONDOWN+CTRL启动采集WM_LBUTTONDOWN+SHIFT停止采集WM_PAINT绘制动态曲线WM_TIMER模拟采集数据鼠标消息的字参数包含按键的状态信息,可据以判断CTRL键和SHIFT键的状态。

第40页:数据采集程序分析

5.5 Mini-MFC程序举例---数据采集模拟程序分析:CWinAppCDrawAppCFrameWndCDrawWnd除此而外,在程序中还声明了一个CDrawApp类的全局对象ThisApp。

#include <afxwin.h>CDrawApp ThisApp;