页数:40页文件大小:255.4 KB来源: VisualC++ppt课件
本课件对应课程第5章MFC编程基础,先说明MFC类库对Windows API的封装及三种应用程序结构,随后重点讲解由CWinApp与CFrameWnd构成的Mini-MFC程序结构、消息映射机制与ON_MESSAGE、ON_COMMAND两类消息映射宏的添加步骤,再演示CPaintDC、CClientDC设备环境及文字、画线、矩形、椭圆、多边形等绘图函数与画笔、画刷的用法,最后给出定时器编程与数据采集模拟实例。
==> 类成员函数ON_MESSAGE()消息映射宏3、定时器消息MFC编程WM_TIMER
5.1 MFC基本概念MFC,Microsoft Foundation ClassMFC库中包含用来开发C++应用程序和Windows应用程序的一组类。
非CObject派生类; (数量不多,但常用)
本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。
5.1 MFC基本概念---MFC程序结构1、Mini-MFC程序结构CWinApp+CFrameWndMini-MFC程序结构中,主应用程序窗口为框架窗口,CFrameWnd派生类对象附属于应用程序的CWinApp派生类对象的m_pMainWnd成员。
5.1 MFC基本概念---MFC程序结构2、基于对话框的应用程序CWinApp+CDialog基于对话框的应用程序与基于框架窗口的应用程序差别不大,只是用CDialog派生类对象代替了CFrameWnd派生类对象作为应用程序的主窗口。
5.1 MFC基本概念---MFC程序结构3、基于文档/视图结构的应用程序文档/视图应用具有较复杂的结构,当然其功能也相应增强。 基于文档/视图结构的应用程序又可分为单文档界面(SDI)和多文档界面(MDI),后者更复杂些。
5.2 Mini-MFC程序结构---CWinAppCWinApp类实现WinMain函数的功能。 MFC将Windows应用程序从开始运行、消息传递到结束运行所需的各步骤均封装在CWinApp类中,CWinApp类表示MFC应用程序的应用对象。
5.2 Mini-MFC程序结构---CWinApp用户应该声明CWinApp派生类为全局对象。 用户从CWinApp派生了一个应用程序类之后,可以重载InitInstance成员函数来创建应用程序的主窗口对象。
5.2 Mini-MFC程序结构---消息映射消息映射本质上就是一个数组,MFC使用消息映射建立消息和类的成员函数的对应关系。
消息映射数组中存储的信息
5.2 Mini-MFC程序结构---消息映射宏1、ON_MESSAGE:处理任意消息语法规则
ON_MESSAGE(ID,func)LRESULT func(WPARAM wParam,LPARAM lParam);5.2 Mini-MFC程序结构---消息映射宏1、ON_MESSAGE:处理任意消息举例:ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown)
LRESULT OnLButtonDown(WPARAM wParam,LPARAM lParam);5.2 Mini-MFC程序结构---消息映射宏2、ON_COMMAND:处理WM_COMMAND消息语法规则
ON_COMMAND(ID,func)void func( ); 举例:ON_COMMAND(ID_OPER_TEST, OnOperTest)void OnOperTest ( );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、在类的实现部分实现成员函数。5.3图形和文字输出---设备环境(DC)
本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。
5.3图形和文字输出---CPaintDCCPaintDC封装的设备环境代表普通的窗口。 CPaintDC类的构造函数调用BeginPaint函数,析构函数调用EndPaint函数。
5.3图形和文字输出---CClientDCCClientDC封装的设备环境代表窗口客户区。 CClientDC类的构造函数调用GetDC函数,析构函数调用ReleaseDC函数。
5.3图形和文字输出---绘图函数1、文字信息显示BOOL TextOut(int x, int y,LPCTSTR lpszString); 在指定坐标(x, y)处显示字符串lpszString的内容,显示成功返回非0值,否则返回0。
5.3图形和文字输出---画线函数画线工作需经两步完成:首先确定线的起始端位置,这可通过调用成员函数MoveTo完成,其原型为:CPo
int MoveTo ( int x, int y ); CPoint MoveTo ( POINT point ); MoveTo将绘图位置(“看不见”)移至指定坐标处,并返回移动前的绘图位置。5.3图形和文字输出---画线函数确定了线的起点后,即可使用成员函数LineTo画线
BOOL LineTo ( int x, int y ); BOOL LineTo ( POINT point ); 其参数为线终点的坐标。5.3图形和文字输出---绘制矩形绘制矩形的成员函数为
BOOL Rectangle ( int x1, int y1, int x2, int y2 ); BOOL Rectangle ( LPCRECT lpRect ); 其参数为需要绘制的矩形的左上角坐标(x1,y1)和右下角坐标(x2, y2)。5.3图形和文字输出---绘制椭圆该成员函数的原型为:BOOL Ellipse(int x1, int y1, int x2, int y2); BOOL Ellipse(LPCRECT lpRect); 其参数的含义为所绘椭圆的包含矩形的左上角和右下角坐标。
5.3图形和文字输出---绘制多边形
BOOL Polygon ( LPPOINT lpPoints,int nCount ); 其中参数lpPoints为一LPPOINT类型的指针,可用CPoint数组(存放多边形的各顶点坐标)作为实参。参数nCount为顶点个数。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);5.3图形和文字输出---画笔
本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。
5.3图形和文字输出---画笔画笔是用来画线的工具,是CPen类的对象。 其使用方法为:1、声明画笔对象,并创建宽度为3的红色实线画笔CPen RedPen;
RedPen.CreatePen(PS_SOLID, 3, RGB(255, 0, 0));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程序举例---数据采集模拟程序分析:CWinAppCDrawAppCFrameWndCDrawWnd除此而外,在程序中还声明了一个CDrawApp类的全局对象ThisApp。
#include <afxwin.h>CDrawApp ThisApp;
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}