可视化编程课件02.ppt

上传人:可****阿 文档编号:72170254 上传时间:2023-02-09 格式:PPT 页数:93 大小:3.12MB
返回 下载 相关 举报
可视化编程课件02.ppt_第1页
第1页 / 共93页
可视化编程课件02.ppt_第2页
第2页 / 共93页
点击查看更多>>
资源描述

《可视化编程课件02.ppt》由会员分享,可在线阅读,更多相关《可视化编程课件02.ppt(93页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1第2章 MFC基础与编程方法nVisual C+6.0开发平台nMFC类的组织结构nMFC向导的主要功能nMFC程序框架分析nWindows消息机制第一页,编辑于星期六:十九点 五十一分。2Visual C+6.0平台(1)编辑区编辑区工作区工作区输出区输出区第二页,编辑于星期六:十九点 五十一分。3Visual C+6.0平台(2)nClassView面板q列出项目中的所有类nFileView面板q显示项目中的所有文件nResourceView面板显示项目中的所有资源,例如Bitmap、Cursor、Dialog、Icon、Menu、Accelerator、String Table、Too

2、lbar与Version等第三页,编辑于星期六:十九点 五十一分。4Visual C+6.0平台(3)n可创建的项目类型 项目类型项目类型 说明说明 Win32 Application Win32应用程序 Win32 Console Application Win32控制台程序 Win32 Dynamic-Link Library Win32动态链接库 Win32 Static Library Win32静态库 MFC AppWizard(exe)MFC可执行程序 MFC AppWizard(dll)MFC动态链接库 MFC ActiveX ControlWizard ActiveX控件程序第

3、四页,编辑于星期六:十九点 五十一分。5Visual C+6.0平台(4)n可创建的项目类型 项目类型项目类型 说明说明 Database Wizard 数据库应用程序 ISAPI Extension Wizard Internet应用程序 ATL COM AppWizard ATL COM程序 Makefile 自动编译文件 Custom AppWizard 用户自定义向导 Utility Project 其他子项目的容器第五页,编辑于星期六:十九点 五十一分。6Visual C+6.0平台(5)n可创建的文件类型 文件类型文件类型 说明说明 C+Source File C+源文件 C+He

4、ader File C+头文件 Text File 文本文件 Resource Template 资源模板文件 Bitmap File 位图文件 Cursor File 光标文件 Icon File 图标文件第六页,编辑于星期六:十九点 五十一分。7Visual C+6.0平台(6)n可创建的文件类型 文件类型文件类型 说明说明 Binary File 二进制文件 HTML Page HTML文件 Active Server Page ASP文件 Resource Script 资源脚本文件 SQL Script File SQL脚本文件 Macro File 宏文件第七页,编辑于星期六:十九

5、点 五十一分。8Visual C+6.0平台(7)nMFC ClassWizard第八页,编辑于星期六:十九点 五十一分。9程序调试与运行(1)n编译(Compile)n链接(Link)n执行(Execute)n调试(Debug)工具按钮工具按钮第九页,编辑于星期六:十九点 五十一分。10程序调试与运行(2)nDebugger可以完成的工作:设置断点单步执行代码监视变量、寄存器和内存查看汇编代码和调用堆栈修改代码和变量值第十页,编辑于星期六:十九点 五十一分。11程序调试与运行(3)nStart DebugqGoqStep IntoqStep OverqStep OutnBreak Point

6、第十一页,编辑于星期六:十九点 五十一分。12程序调试与运行(4)例例2-12-1第十二页,编辑于星期六:十九点 五十一分。13项目的概念(1)n项目(Project)由多个源、头文件组成,以及系统提供的函数支持,编译时有很多特殊选择,例如版本、优化、链接库等n项目内容存在项目文件中,由它对整个程序进行统一管理。不同版本文件后缀不同,Visual C+5.0以上为“.dsp”第十三页,编辑于星期六:十九点 五十一分。14项目的概念(2)n版本类型Debug版本产生调试信息,便于程序调试与运行Release版本不产生调试信息,代码简短且经过优化,程序执行效率较高第十四页,编辑于星期六:十九点 五

7、十一分。15项目的概念(3)nBuild菜单Batch Build第十五页,编辑于星期六:十九点 五十一分。16项目的概念(4)n项目文件类型*.dsp 项目中所有内容*.dsw 工作区中所有项目*.clw ClassWizard信息*.rc 资源描述信息Resource.h 所有资源符号定义StdAfx.h和.cpp 建立预编译头文件/res 各种资源存放的目录第十六页,编辑于星期六:十九点 五十一分。17MFC类的组织结构(1)nMFC是C+语言的安全子集,也是一个应用程序框架,简化Windows编程难度nMFC类是以层次结构组织,封装大部分Windows API和控件n当前MFC版本包含

8、100多个类,可实现应用程序的大部分功能第十七页,编辑于星期六:十九点 五十一分。18MFC类的组织结构(2)n根类(CObject)n应用程序结构类(CCmdTarget、CWinThread、CWinApp、CDocument)n可视对象类(CWnd、CView、CMenu、CDialog、控件类、CControlBar、CGdiObject)n通用类(CFile、CException、CArray)第十八页,编辑于星期六:十九点 五十一分。19根类与应用程序类(1)n根类CObjectqCObject是MFC抽象基类,多数MFC类与用户自定义类的根类,提供编程所需的公共操作,例如对象建立

9、与删除n应用程序类CWinAppCWinApp是MFC应用程序基类,每个程序只有一个程序对象,该类是从CWinApp派生,提供程序相关操作,例如初始化、运行与终止第十九页,编辑于星期六:十九点 五十一分。20根类与应用程序类(2)nCWinApp类的继承关系CCmdTarget:MFC消息映射基类CWinThread:MFC线程操作基类第二十页,编辑于星期六:十九点 五十一分。21根类与应用程序类(3)nCWinApp类的公有成员函数 函数名函数名 功能功能 InitInstance 初始化应用程序 Run 启动默认的消息循环 ExitInstance 终止应用程序 LoadCursor 向应

10、用程序加载光标 LoadIcon 向应用程序加载图标 DoMessageBox 弹出一个消息框 OpenDocumentFile 打开一个文档对象 CloseAllDocuments 关闭所有打开的文档对象第二十一页,编辑于星期六:十九点 五十一分。22根类与应用程序类(4)n文档与视图q文档对象由文档模板创建,管理应用程序的数据,包括文档创建、打开与保存n文档模板及基类:CDocTemplate:文档模板基类CSingleDocTemplate:SDI文档模板CMultiDocTemplate:MDI文档模板CDocument:专用文档基类第二十二页,编辑于星期六:十九点 五十一分。23可视

11、对象类(1)n窗口类CWndqCWnd类是MFC窗口基类,实现不同类型窗口nCWnd派生类CFrameWnd:单文档框架窗口类CMIDFrameWnd:多文档主框架窗口类CMIDChildWnd:多文档子框架窗口类第二十三页,编辑于星期六:十九点 五十一分。24可视对象类(2)n视图类CViewCView类是MFC视图基类,实现框架窗口中的客户区第二十四页,编辑于星期六:十九点 五十一分。25可视对象类(3)nCView派生类 派生类名派生类名 功能功能 CScrollView 带滚动条的视图 CCtrlView 带树状列表框控件的视图 CEditView 带文本编辑器的视图 CFormVie

12、w 基于表单模板的视图 CListView 带列表框控件的视图 CRecordView 可显示数据库记录的视图 CRichEditView 带格式文本编辑器的视图 CPreviewView 支持打印预览的视图第二十五页,编辑于星期六:十九点 五十一分。26可视对象类(4)n菜单类CMenuqCMenu类是MFC菜单类,实现菜单界面n对话框类CDialogCFileDialog:文件存取对话框CColorDialog:颜色选择对话框CFontDialog:字体选择对话框CPrintDialog:文件打印对话框CFindReplaceDialog:文本查找对话框第二十六页,编辑于星期六:十九点 五

13、十一分。27可视对象类(5)n控件类 控件类名控件类名 功能功能 控件类名控件类名 功能功能 CStatic 文本 CHotKeyCtrl 热键 CEdit 编辑框 CRichEditCtrl 格式编辑框 CScrollBar 滚动条 CProgressCtrl 进度条 CSlideCtrl 游标 CSpinButtonCtrl 双向箭头 CComboBox 组合框 CBitmapButton 位图按钮 CListBox 列表框 CAnimateCtrl 动画显示 CButton 按钮 CToolTipCtrl 弹出式窗口第二十七页,编辑于星期六:十九点 五十一分。28可视对象类(6)n控件条

14、类CControlBarqCControlBar是控件栏基类,实现工具条、状态条与浮动对话框nCControlBar派生类CStatusBar:状态条CToolBar:带位图按钮的工具条CDialogBar:控件条形式的浮动对话框第二十八页,编辑于星期六:十九点 五十一分。29可视对象类(7)n绘图对象类CGdiObjectqCGdiObject是GDI基类,实现绘图对象nCGdiObject派生类CBitmap:位图操作接口CBrush:画刷CFont:字体CPalette:调色板CPen:画笔CRgn:椭圆或多边型域第二十九页,编辑于星期六:十九点 五十一分。30可视对象类(8)n设备描述

15、环境类CDCq主要用来实现窗口绘制nCDC派生类CPaintDC:绘图设备描述环境CClientDC:客户区的设备描述环境CWindowDC:窗口的设备描述环境CMetaFileDC:元文件的设备描述环境第三十页,编辑于星期六:十九点 五十一分。31通用类(1)n文件类CFileqCFile类是文件访问基类,实现文件输入与输出操作nCFile派生类qCMemFile:驻内存文件访问接口qCStdioFile:缓存流式文件访问接口nCArchive类CFile类通常由CArchive间接访问第三十一页,编辑于星期六:十九点 五十一分。32通用类(2)n异常类CExceptionCNotSuppo

16、rtException:不支持异常CMemoryException:内存异常CFileException:文件异常CResourceException:资源异常COleException:OLE异常CDBException:数据库异常CUserException:用户操作异常第三十二页,编辑于星期六:十九点 五十一分。33通用类(3)n模板收集类CArray:将数据存储到数组CList:将数据存储到链表CMap:关键字与数据的映射第三十三页,编辑于星期六:十九点 五十一分。34OLE类nOLE是对象链接与嵌入,对象服务体系结构普通类:COleDocument、COleItem客户类:COleC

17、lientDoc、COleClientItem服务类:COleServer、COleTemplate可视编辑容器类:COleLinkingDoc数据传输类:COleDropSource、COleTarget、COleDataSource、COleDataObject对话类:COleInsertDialog第三十四页,编辑于星期六:十九点 五十一分。35ODBC类nODBC类是MFC数据库访问类,可访问支持ODBC的数据库系统,完成查询、更新等操作CDatabase:连接数据源CRecordset:数据源的一组记录CRecordView:记录的表单视图CFieldExchange:支持记录字段交

18、换CLongBinary:存储二进制对象句柄第三十五页,编辑于星期六:十九点 五十一分。36MFC全局函数n以Afx为前缀的函数 函数名函数名 功能功能 AfxAbort 终止一个应用程序 AfxBeginThread 创建并执行一个线程 AfxEndThread 终止正在执行的线程 AfxMessageBox 弹出一个消息框 AfxGetApp 返回当前应用程序对象的指针 AfxGetInstanceHandle 返回当前应用程序对象的句柄 AfxRegisterWndClass 注册一个窗口类第三十六页,编辑于星期六:十九点 五十一分。37MFC向导功能(1)第1步:应用程序类型 第2步:

19、数据库支持例例2-22-2第三十七页,编辑于星期六:十九点 五十一分。38MFC向导功能(2)第3步:OLE与ActiveX 第4步:用户界面第三十八页,编辑于星期六:十九点 五十一分。39MFC向导功能(3)第5步:应用程序风格 第6步:MFC类选择第三十九页,编辑于星期六:十九点 五十一分。40MFC向导功能(4)nSingle DocumentnNo DatabasenNo OLEnTool BarnStatus BarnSystem Button 第四十页,编辑于星期六:十九点 五十一分。41MFC程序框架分析(1)例例2-32-3nWindows程序核心是CWinApp第四十一页,编

20、辑于星期六:十九点 五十一分。42MFC程序框架分析(2)nTest.cpp qCTestApp theAppqBOOL CTestApp:InitInstance()nWinMain.cpp pThread-InitInstance()nReturnCode=pThread-Run()AfxWinTerm()第四十二页,编辑于星期六:十九点 五十一分。43MFC程序框架分析(3)第四十三页,编辑于星期六:十九点 五十一分。44MFC程序框架分析(4)n每次启动新的应用程序,WinMain函数都调用InitInstance()创建并注册文档模板 CSingleDocTemplate*pDocT

21、emplate;CSingleDocTemplate*pDocTemplate;pDocTemplate=new CSingleDocTemplate(pDocTemplate=new CSingleDocTemplate(IDR_MAINFRAME,IDR_MAINFRAME,RUNTIME_CLASS(CTestDoc),RUNTIME_CLASS(CTestDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CTestView);RUNTIME_CLASS(CTestView);AddDocTemp

22、late(pDocTemplate);AddDocTemplate(pDocTemplate);第四十四页,编辑于星期六:十九点 五十一分。45MFC程序框架分析(5)装载标准文件选项创建主边框窗口 CMainFrame*pMainFrame=new CMainFrame;CMainFrame*pMainFrame=new CMainFrame;if(!pMainFrame-LoadFrame(IDR_MAINFRAME)if(!pMainFrame-LoadFrame(IDR_MAINFRAME)return FALSE;return FALSE;m_pMainWnd=pMainFrame;

23、m_pMainWnd=pMainFrame;pMainFrame-ShowWindow(m_nCmdShow);pMainFrame-ShowWindow(m_nCmdShow);pMainFrame-UpdateWindow();pMainFrame-UpdateWindow();第四十五页,编辑于星期六:十九点 五十一分。46MFC程序框架分析(6)nInitInstance():初始化应用程序nRun():启动消息循环nOnIdle():空闲处理nExitInstance():终止应用程序第四十六页,编辑于星期六:十九点 五十一分。47文档模板(1)n文档模板用于存放与文档、视图和边框窗

24、口相关的信息qCSingleDocTemplate 单文档模板qCMultiDocTemplate 多文档模板n传递给C*DocTemplate的资源符号串,包括7个参数,每个参数用n隔开,用GetDocString可获得每个参数第四十七页,编辑于星期六:十九点 五十一分。48文档模板(2)参数名参数名 含义含义 WindowTitle 标题栏中的应用程序名 DocName 默认文件名的固定部分 FileNewName 文档类型的名字(多文档情况)FilterName 文档类型和通配符过滤器的描述 FilterExt 文档文件的扩展名 RegFileTypeId 注册表中登记的文档类型 Reg

25、FileTypeName 注册表中登记的文档类型名n资源符号串第四十八页,编辑于星期六:十九点 五十一分。49窗口类与窗口对象第四十九页,编辑于星期六:十九点 五十一分。50消息的概念n消息处理机制是Windows核心,它是应用程序运行的动力来源n消息是系统定义的32位值,它唯一定义一个事件,向Windows系统发出一个通知,告诉应用程序某个事件发生第五十页,编辑于星期六:十九点 五十一分。51消息循环nPeekMessage:查看消息队列,只起检测作用nGetMessage:查看消息队列,将消息移走nPreTranslateMessage:TranslateMessage的预处理函数nTra

26、nslateMessage:将虚拟键转化为字符码,例如Shift+8*nDispatchMessage:消息分发到消息处理函数第五十一页,编辑于星期六:十九点 五十一分。52消息映射表/T TestView.hestView.hclass CTestView:public CViewclass CTestView:public CView protected:protected:/AFX_MSG(CTestView)AFX_MSG(CTestView)afx_msg void OnLButtonDown(UINT nFlags,CPoint point);afx_msg void OnLBut

27、tonDown(UINT nFlags,CPoint point);afx_msg void OnEditPaste();afx_msg void OnEditPaste();/AFX_MSG/AFX_MSG DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP();/T/TestView.estView.cppcppBEGIN_MESSAGE_MAP(CTestView,CView)BEGIN_MESSAGE_MAP(CTestView,CView)/AFX_MSG_MAP(CTestView)/AFX_MSG_MAP(CTestView)ON_WM_LBUTTO

28、NDOWN()ON_WM_LBUTTONDOWN()ON_COMMAND(ID_EDIT_PASTE,OnEditPaste)ON_COMMAND(ID_EDIT_PASTE,OnEditPaste)/AFX_MSG_MAP /AFX_MSG_MAPEND_MESSAGE_MAP()END_MESSAGE_MAP()第五十二页,编辑于星期六:十九点 五十一分。53消息控制机制(1)n在CTestView:OnDraw()中例例2-42-4 pDC-TextOut(20,20,Hello WorldpDC-TextOut(20,20,Hello World!););pDC-SelectStock

29、Object(GRAY_BRUSH);pDC-SelectStockObject(GRAY_BRUSH);pDC-Ellipse(20,50,100,1pDC-Ellipse(20,50,100,13 30);0);第五十三页,编辑于星期六:十九点 五十一分。54消息控制机制(2)n鼠标控制消息CDC*pDC=GetDC();CDC*pDC=GetDC();pDC-TextOut(point.x,point.y,Mouse Clicked!);pDC-TextOut(point.x,point.y,Mouse Clicked!);ReleaseDC(pDC);ReleaseDC(pDC);第五

30、十四页,编辑于星期六:十九点 五十一分。55消息控制机制(3)n鼠标控制消息 CClientDC cDC(this);CClientDC cDC(this);cDC.TextOut(point.x,point.y,Mouse Clicked!);cDC.TextOut(point.x,point.y,Mouse Clicked!);第五十五页,编辑于星期六:十九点 五十一分。56消息控制机制(4)n菜单控制消息 CDC*pDC=GetDC();CDC*pDC=GetDC();pDC-TextOut(pDC-TextOut(20,12020,120,Menu Clicked!);,Menu Cl

31、icked!);ReleaseDC(pDC);ReleaseDC(pDC);第五十六页,编辑于星期六:十九点 五十一分。57趣味性例子(1)n绘制一片绿色的叶子例例2-52-5第五十七页,编辑于星期六:十九点 五十一分。58趣味性例子(2)void CMyTreeView:OnDraw(CDC*pDC)void CMyTreeView:OnDraw(CDC*pDC)int nTotalPoints=32000;/int nTotalPoints=32000;/打印打印nTotalPointsnTotalPoints个点个点 CRect rect;CRect rect;GetClientRect

32、(&rect);GetClientRect(&rect);int nX=rect.right/2;/(nX,nY)int nX=rect.right/2;/(nX,nY)记录树的根坐标记录树的根坐标 int nY=rect.bottom*5/6;int nY=rect.bottom*5/6;int nScale=(rect.rightrect.bottom?rect.bottom:rect.right)/15;int nScale=(rect.rightrect.bottom?rect.bottom:rect.right)/15;COLORREF crColor=0 x00FF00;COLOR

33、REF crColor=0 x00FF00;double dX=0,dY=0;double dX=0,dY=0;double dP;double dP;for(int i=0;inTotalPoints;i+)for(int i=0;inTotalPoints;i+)dP=1.0*rand()/RAND_MAX;dP=1.0*rand()/RAND_MAX;if(dP=0.01)if(dP0.01&dP0.01&dP0.86&dP0.86&dP0.93)if(dP0.93)dX=-0.20*dX+0.26*dY;dX=-0.20*dX+0.26*dY;dY=0.44*dX+0.12*dY+1.

34、00;dY=0.44*dX+0.12*dY+1.00;pDC-SetPixel(nX+int(dX*nScale),nY-int(dY*nScale),crColor);pDC-SetPixel(nX+int(dX*nScale),nY-int(dY*nScale),crColor);第五十九页,编辑于星期六:十九点 五十一分。60消息的种类(1)nWindows系统将各种事件以消息形式发送给目标,目标根据消息内容进行处理目标窗口 消息类型 参数wParam 参数lParam第六十页,编辑于星期六:十九点 五十一分。61消息的种类(2)n标准Windows消息q窗口消息(WM_CREATE、W

35、M_PAINT等)、鼠标消息(WM_LBUTTONDOWN、WM_MOUSEMOVE等)、键盘消息(WM_KEYDOWN、WM_CHAR等)、WM_TIMERn控件消息q从控件传送给父窗口的消息n命令消息用户界面对象(包括菜单、工具栏、加速键等)的WM_COMMAND消息第六十一页,编辑于星期六:十九点 五十一分。62消息处理过程(1)n标准Windows消息不通过命令目标链,由发送消息的窗口处理,处理函数在相应类中定义,通过AFX_MSG区分/AFX_MSG(CTestView)/AFX_MSG(CTestView)afx_msg int OnCreate(LPCREATESTRUCT lp

36、CreateStruct);afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnDestroy();afx_msg void OnDestroy();afx_msg void OnLButtonDown(UINT nFlags,CPoint afx_msg void OnLButtonDown(UINT nFlags,CPoint point);point);/AFX_MSG/AFX_MSG第六十二页,编辑于星期六:十九点 五十一分。63消息处理过程(2)nWM_COMMAND能被更多的对象处理,包括应用程序、窗

37、口、文档与视图等n命令消息通过命令目标链发送,每个目标都检查自己的消息映射,决定能否处理消息n命令目标链发送顺序:当前活动的子目标、自己、其它目标第六十三页,编辑于星期六:十九点 五十一分。64消息处理过程(3)n命令处理顺序接收命令的类接收命令的类命令处理顺序命令处理顺序MDI主边框窗口当前MDI子窗口MDI主边框窗口应用程序SDI主边框窗口或MDI子边框窗口当前视图 SDI主边框窗口或MDI子边框窗口应用程序视图视图视图相关文档文档文档文档相关模板对话框对话框对话框父窗口应用程序第六十四页,编辑于星期六:十九点 五十一分。65窗口消息(1)nWM_CREATE消息q当窗口对象生成后,系统发

38、送WM_CREATE,完成窗口的初始化nWM_DESTROY消息q当应用程序退出时,系统发送WM_DESTROY,完成某些收尾工作nWM_PAINT消息当窗口发生变化时,系统发送WM_PAINT,重绘窗口并显示数据第六十五页,编辑于星期六:十九点 五十一分。66窗口消息(2)n添加WM_CREATE消息qClassWizardMessage MapsCTestView WM_CREATEAdd Functionn编写WM_CREATE的响应函数CTestView:OnCreate()中 MessageBox(MessageBox(完成窗口初始化完成窗口初始化!);!);n添加WM_DESTRO

39、Y消息qCTestView:OnDestory()中 MessageBox(MessageBox(完成窗口销毁完成窗口销毁!);!);例例2-62-6第六十六页,编辑于星期六:十九点 五十一分。67窗口消息(3)第六十七页,编辑于星期六:十九点 五十一分。68窗口消息(4)n在CTestView类定义中n在CTestView构造函数中n在CTestView:OnDraw()中m_Num=0;/m_Num=0;/初始化初始化private:int m_Num;private:int m_Num;m_Num+;m_Num+;CString str;CString str;str.Format(st

40、r.Format(窗口重绘次数窗口重绘次数:%d,m_Num);:%d,m_Num);pDC-TextOut(0,0,str);pDC-TextOut(0,0,str);pDC-SelectStockObject(GRAY_BRUSH);pDC-SelectStockObject(GRAY_BRUSH);pDC-Ellipse(0,20,200,220);pDC-Ellipse(0,20,200,220);第六十八页,编辑于星期六:十九点 五十一分。69窗口消息(5)nWM_PAINTCTestView消息循环CView消息循环CView:OnPaint()CView:OnDraw()第六十九

41、页,编辑于星期六:十九点 五十一分。70鼠标消息(1)n当用户对鼠标进行操作时,会产生对应的消息,系统将消息发送给对应窗口n鼠标消息主要包括:WM_MOUSEMOVE 鼠标移动WM_LBUTTONDOWN 鼠标左键按下WM_RBUTTONDOWN 鼠标右键按下WM_LBUTTONUP 鼠标左键释放WM_RBUTTONUP 鼠标右键释放WM_LBUTTONDBLCLK 鼠标左键双击第七十页,编辑于星期六:十九点 五十一分。71鼠标消息(2)n鼠标消息处理函数的参数:nFlag和pointnnFlag表示鼠标按钮状态,鼠标事件发生时的键盘某些键状态,每位由nFlag相应位表示qMK_CONTROL

42、、MK_SHIFT、MK_LBUTTON、MK_MBUTTON、MK_RBUTTONnpoint表示鼠标事件发生时的光标位置第七十一页,编辑于星期六:十九点 五十一分。72鼠标消息(3)n在CTestView:OnLButtonDown()中n窗口最小化,然后最大化。哪些信息保留,哪些信息消失?为什么?如何保留最后一次鼠标单击信息?例例2-72-7 CDC*pDC=GetDC();CDC*pDC=GetDC();pDC-TextOut(point.x,point.y,Mouse Clicked!);pDC-TextOut(point.x,point.y,Mouse Clicked!);Rele

43、aseDC(pDC);ReleaseDC(pDC);第七十二页,编辑于星期六:十九点 五十一分。73鼠标消息(4)n在CTestView类定义中n在CTestView:CTestView()中private:private:CPoint m_Pos;CPoint m_Pos;CString m_Des;CString m_Des;m_Pos=CPoint(0,0);m_Pos=CPoint(0,0);m_Des.Empty();m_Des.Empty();第七十三页,编辑于星期六:十九点 五十一分。74鼠标消息(5)n在CTestView:OnLButtonDown()中n在CTestView

44、:OnDraw()中m_Pos=point;m_Pos=point;if(nFlags&MK_CONTROL)if(nFlags&MK_CONTROL)m_Des=CTRL+m_Des=CTRL+单击鼠标左键单击鼠标左键;elseelse m_Des=m_Des=单击鼠标左键单击鼠标左键;Invalidate(true);Invalidate(true);pDC-TextOut(m_Pos.x,m_Pos.y,m_Des);pDC-TextOut(m_Pos.x,m_Pos.y,m_Des);第七十四页,编辑于星期六:十九点 五十一分。75鼠标消息(6)n窗口重绘的结果第七十五页,编辑于星期六

45、:十九点 五十一分。76键盘消息(1)n用户对键盘进行操作,产生相应的键盘消息,系统将消息发送给相应窗口n键盘消息主要包括:WM_KEYDOWN:键盘按下WM_KEYUP:键盘弹起WM_CHAR:输入一个字符第七十六页,编辑于星期六:十九点 五十一分。77键盘消息(2)n在CTestView:OnChar()中void CTestView:OnChar(UINT nChar,UINT void CTestView:OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)nRepCnt,UINT nFlags)CString str;CString str;str.

46、Format(str.Format(按下按下%c%c键键!,nChar);!,nChar);MessageBox(str,MessageBox(str,键盘按键键盘按键););例例2-82-8第七十七页,编辑于星期六:十九点 五十一分。78键盘消息(3)n特殊键处理,例如F1、F2、等BOOL CTestView:PreTranslateMessage(MSG*pMsg)BOOL CTestView:PreTranslateMessage(MSG*pMsg)if(pMsg-message=WM_KEYDOWN)if(pMsg-message=WM_KEYDOWN)if(pMsg-wParam=

47、VK_F1)if(pMsg-wParam=VK_F1)MessageBox(MessageBox(按下按下F1F1键键););if(pMsg-wParam=VK_UP)if(pMsg-wParam=VK_UP)MessageBox(MessageBox(按下按下键键););第七十八页,编辑于星期六:十九点 五十一分。79菜单与工具栏消息(1)n添加菜单消息nResourceViewMenuIDR_MAINFRAMEn一级菜单项MyMenu二级菜单项Execute(ID_EXECUTE)n一级菜单项MyMenu二级菜单项Font(ID_FONT)n在CTestView:OnExecute()中n

48、MessageBox(MessageBox(菜单创建成功菜单创建成功!););例例2-92-9第七十九页,编辑于星期六:十九点 五十一分。80菜单与工具栏消息(2)n添加工具栏消息qResourceViewToolBarIDR_MAINFRAME添加按钮(ID_COLOR)n在CTestView:OnColor()中CColorDialog Dlg;CColorDialog Dlg;Dlg.DoModal();Dlg.DoModal();第八十页,编辑于星期六:十九点 五十一分。81WM_TIMER消息(1)nWM_TIMER消息是一种计时器消息n通过SetTimer()函数设置时钟,当预定的

49、时间到达,系统产生WM_TIMER消息,并通过参数表明是哪个时钟n用户用于进行周期性处理第八十一页,编辑于星期六:十九点 五十一分。82WM_TIMER消息(2)nWM_CREATE消息,在OnCreate()中 SetTimer(1,2000,NULL);SetTimer(1,2000,NULL);/设置计时器,ID号为1,间隔2000ms,消息处理函数默认nWM_TIMER消息,在OnTimer()中if(nIDEvent=1)if(nIDEvent=1)nWM_DESTROY消息,在OnDestroy()中KillTimer(1);KillTimer(1);/清除计时器1第八十二页,编辑

50、于星期六:十九点 五十一分。83简单动画程序设计n使用WM_TIMER消息n异或方式制作动画:SetROP2(R2_XORPEN)例例2-102-10第八十三页,编辑于星期六:十九点 五十一分。84其他消息(1)n有些消息不常出现,ClassWizard中没有封装,因此找不到相应消息,但系统确实存在该消息,需要手工处理消息n典型的是热键消息WM_HOTKEY。用户可以定义一个热键,不论是前台或后台程序,只要用户按这个热键,程序立即切换到前台,并收到一个热键消息,参数表明哪个热键按下第八十四页,编辑于星期六:十九点 五十一分。85其他消息(2)n在CTestView类定义中void OnHotk

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com