![中国石油大学(华东)VC++实验六_第1页](http://file4.renrendoc.com/view/1dc6562774ed8ab38ce07a0c1dc7ce1a/1dc6562774ed8ab38ce07a0c1dc7ce1a1.gif)
![中国石油大学(华东)VC++实验六_第2页](http://file4.renrendoc.com/view/1dc6562774ed8ab38ce07a0c1dc7ce1a/1dc6562774ed8ab38ce07a0c1dc7ce1a2.gif)
![中国石油大学(华东)VC++实验六_第3页](http://file4.renrendoc.com/view/1dc6562774ed8ab38ce07a0c1dc7ce1a/1dc6562774ed8ab38ce07a0c1dc7ce1a3.gif)
![中国石油大学(华东)VC++实验六_第4页](http://file4.renrendoc.com/view/1dc6562774ed8ab38ce07a0c1dc7ce1a/1dc6562774ed8ab38ce07a0c1dc7ce1a4.gif)
![中国石油大学(华东)VC++实验六_第5页](http://file4.renrendoc.com/view/1dc6562774ed8ab38ce07a0c1dc7ce1a/1dc6562774ed8ab38ce07a0c1dc7ce1a5.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验六MFC定时器编程实验实验目的(1)掌握VisualStudio开发环境调试程序的方法;(2)掌握MFC消息映射的操作步骤;(3)掌握MFC编程模式中定时器的使用方法。实验内容设计一个窗口,在窗口中间位置绘制一个红色粗实线的矩形,并用交替使用三种不同样式的画刷填充矩形的内部,每次刷新的时间间隔为1.0秒。单击鼠标左键启动定时器,单击鼠标右键停止定时器。实验报告列出定时器操作相关的程序清单;头文件:#include"afxwin.h"classCDemoWnd:publicCFrameWnd{public: CDemoWnd(); ~CDemoWnd();public: LRESULTOnPaint(WPARAMwParam,LPARAMlParam); LRESULTOnTimer(WPARAMwParam,LPARAMlParam); LRESULTOnLButtonDown(WPARAMwParam,LPARAMlParam); LRESULTOnRButtonDown(WPARAMwParam,LPARAMlParam); DECLARE_MESSAGE_MAP()public: intm;};classCDemoApp:publicCWinApp{public: BOOLInitInstance();};CDemoAppthisApp;源文件:#include"Demo.h"CDemoWnd::CDemoWnd(){m=0;}CDemoWnd::~CDemoWnd(){}BEGIN_MESSAGE_MAP(CDemoWnd,CFrameWnd) ON_MESSAGE(WM_PAINT,OnPaint) ON_MESSAGE(WM_TIMER,OnTimer) ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown) ON_MESSAGE(WM_RBUTTONDOWN,OnRButtonDown)END_MESSAGE_MAP()LRESULTCDemoWnd::OnLButtonDown(WPARAMwParam,LPARAMlParam){ SetTimer(1,1000,NULL); return0;}LRESULTCDemoWnd::OnRButtonDown(WPARAMwParam,LPARAMlParam){ KillTimer(1); return0;}LRESULTCDemoWnd::OnPaint(WPARAMwParam,LPARAMlParam){CPaintDCdc(this);CPenPen,*pOldPen; CBrushBrush,*pOldBrush; Pen.CreatePen(PS_SOLID,3,RGB(255,0,0)); switch(m) { case0: Brush.CreateHatchBrush(HS_CROSS,RGB(0,255,0)); m++; break; case1: Brush.CreateHatchBrush(HS_HORIZONTAL,RGB(0,0,255)); m++; break; case2: Brush.CreateHatchBrush(HS_VERTICAL,RGB(0,255,255)); m=0; break; }pOldPen=dc.SelectObject(&Pen); pOldBrush=dc.SelectObject(&Brush); dc.Rectangle(300,200,600,500); dc.SelectObject(pOldPen);dc.SelectObject(pOldBrush); returnTRUE;}LRESULTCDemoWnd::OnTimer(WPARAMwParam,LPARAMlParam){ CRectrt(300,200,600,500); InvalidateRect(&rt); return0;}BOOLCDemoApp::InitInstance(){ CDemoWnd*pMainWnd=newCDemoWnd(); pMainWnd->Create(NULL,_T("DemoMini-MFC")); pMainWnd->ShowWindow(m_nCmdShow); pMainWnd->UpdateWindow(); m_pMainWnd=pMainWnd; returnTRUE;}总结定时器消息编程的步骤,以及程序设计过程中需要注意的问题;定时器消息编程的步骤:1、定时器消息定时器时间到时,向窗口发送WM_TIMER消息,应用程序窗口通过处理该消息来对定时器事件进行处理,该消息的参数说明如下:WM_TIMERwTimerID=wParam;//定时器标识符tmprc=(TIMERPROC*)lParam;//定时器回调函数的地址其中,定时器回调函数在使用SetTimer启动定时器时指定,如果没有指定定时器回调函数则可直接通过消息映射处理WM_TIMER消息。2、启动定时器使用SetTimer函数创建一个定时器,并制定超时时间,然后启动定时器。该函数说明如下:UINTSetTimer(UINTnIDEvent,//定时器标识符UINTnElapse,//定时时间,单位是毫秒void(CALLBACKEXPORT*lpfnTimer)//定时器回调函数地址(HWND,UINT,UINT,DWORD));示例代码:SetTimer(1,200,NULL);3、销毁定时器定时器在不使用时要使用KillTimer函数进行销毁,该函数说明如下:BOOLKillTimer(intnIDEvent//定时器标识符);示例代码:KillTimer(1);程序设计过程中需要注意的问题:定时器的使用时,要严格按照定时器消息的编写,启动定时器,销毁定时器这三个步骤来做。总结实验的心得体会,实验中遇到的困难以及解决的方法等。在进行定时器消息编程时,出得问题主要是,将图形绘制的编码写在了LRESULTCDemoWnd::OnTimer(WPARAMwParam,LPARAMlParam){}里,后将图形绘制的编码写在LRESULTCDemoWnd::OnPaint(WPARAMwParam,LPARAMlPar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论