欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    可视化编程课件02MFC.ppt

    • 资源ID:3021190       资源大小:5.53MB        全文页数:96页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    可视化编程课件02MFC.ppt

    第第2 2章章 MFCMFC基础与编程方法基础与编程方法 nVisual C+ 6.0开发平台 nMFC类的组织结构 nMFC向导的主要功能 nMFC程序框架分析 nWindows消息机制 1 Visual C+ 6.0Visual C+ 6.0平台平台(1)(1) 编辑区 工作区 输出区 2 Visual C+ 6.0Visual C+ 6.0平台平台(2)(2) nClassView面板 ü列出项目中的所有类 nFileView面板 ü显示项目中的所有文件 nResourceView面板 ü显示项目中的所有资源,例如Bitmap、Cursor 、 Dialog、Icon、Menu、Accelerator、 String Table、Toolbar与Version等 3 Visual C+ 6.0Visual C+ 6.0平台平台(3)(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控件程序 4 Visual C+ 6.0Visual C+ 6.0平台平台(4)(4) n可创建的项目类型 项项目类类型 说说明 Database Wizard 数据库应用程序 ISAPI Extension Wizard Internet应用程 序 ATL COM AppWizard ATL COM程序 Makefile 自动编译 文件 Custom AppWizard 用户自定义向导 Utility Project 其他子项目的容 器 5 Visual C+ 6.0Visual C+ 6.0平台平台(5)(5) n可创建的文件类型 文件类类型 说说明 C+ Source File C+源文件 C+ Header File C+头文件 Text File 文本文件 Resource Template 资源模板文件 Bitmap File 位图文件 Cursor File 光标文件 Icon File 图标文件 6 Visual C+ 6.0Visual C+ 6.0平台平台(6)(6) n可创建的文件类型 文件类类型 说说明 Binary File 二进制文件 HTML Page HTML文件 Active Server Page ASP文件 Resource Script 资源脚本文件 SQL Script File SQL脚本文件 Macro File 宏文件 7 Visual C+ 6.0Visual C+ 6.0平台平台(7)(7) nMFC ClassWizard 8 程序调试与运行程序调试与运行(1)(1) n编译(Compile) n链接(Link) n执行(Execute) n调试(Debug) 工具按钮 9 程序调试与运行程序调试与运行(2)(2) nDebugger可以完成的工作: ü设置断点 ü单步执行代码 ü监视变量、寄存器和内存 ü查看汇编代码和调用堆栈 ü修改代码和变量值 10 程序调试与运行程序调试与运行(3)(3) nStart Debug üGo üStep Into üStep Over üStep Out nBreak Point 11 程序调试与运行程序调试与运行(4)(4) 例2-1 12 项目的概念项目的概念(1)(1) n项目(Project)由多个源、头文件组成,以及 系统提供的函数支持,编译时有很多特殊选择 ,例如版本、优化、链接库等 n项目内容存在项目文件中,由它对整个程序进 行统一管理。不同版本文件后缀不同,Visual C+ 5.0以上为“.dsp” 13 项目的概念项目的概念( (2 2) ) n版本类型 üDebug版本产生调试信息,便于程序调试与 运行 üRelease版本不产生调试信息,代码简短且 经过优化,程序执行效率较高 14 项目的概念项目的概念( (3 3) ) nBuild菜单Batch Build 15 项目的概念项目的概念( (4 4) ) n项目文件类型 ü*.dsp 项目中所有内容 ü*.dsw 工作区中所有项目 ü*.clw ClassWizard信息 ü*.rc 资源描述信息 üResource.h 所有资源符号定义 üStdAfx.h和.cpp 建立预编译头文件 ü/res 各种资源存放的目录 16 MFCMFC类的组织结构类的组织结构(1)(1) nMFC是C+语言的安全子集,也是一个应用程序 框架,简化Windows编程难度 nMFC类是以层次结构组织,封装大部分Windows API和控件 n当前MFC版本包含100多个类,可实现应用程序 的大部分功能 17 MFCMFC类的组织结构类的组织结构(2)(2) n根类(CObject) n应用程序结构类(CCmdTarget、CWinThread、 CWinApp、CDocument) n可视对象类(CWnd、CView、CMenu、CDialog、 控件类、CControlBar、CGdiObject) n通用类(CFile、CException、CArray) 18 根类与应用程序类根类与应用程序类(1)(1) n根类CObject üCObject是MFC抽象基类,多数MFC类与用户 自定义类的根类,提供编程所需的公共操作 ,例如对象建立与删除 n应用程序类CWinApp üCWinApp是MFC应用程序基类,每个程序只有 一个程序对象,该类是从CWinApp派生,提 供程序相关操作,例如初始化、运行与终止 19 根类与应用程序类根类与应用程序类(2)(2) nCWinApp类的继承关系 üCCmdTarget:MFC消息映射基类 üCWinThread:MFC线程操作基类 20 根类与应用程序类根类与应用程序类(3)(3) nCWinApp类的公有成员函数 函数名 功能 InitInstance 初始化应用程序 Run 启动默认的消息循环 ExitInstance 终止应用程序 LoadCursor 向应用程序加载光标 LoadIcon 向应用程序加载图标 DoMessageBox 弹出一个消息框 OpenDocumentFile 打开一个文档对象 CloseAllDocuments 关闭所有打开的文档对 象 21 根类与应用程序类根类与应用程序类(4)(4) n文档与视图 ü文档对象由文档模板创建,管理应用程序的 数据,包括文档创建、打开与保存 n文档模板及基类: üCDocTemplate:文档模板基类 üCSingleDocTemplate:SDI文档模板 üCMultiDocTemplate:MDI文档模板 üCDocument:专用文档基类 22 可视对象类可视对象类(1)(1) n窗口类CWnd üCWnd类是MFC窗口基类,实现不同类型窗口 nCWnd派生类 üCFrameWnd:单文档框架窗口类 üCMIDFrameWnd:多文档主框架窗口类 üCMIDChildWnd:多文档子框架窗口类 23 可视对象类可视对象类(2)(2) n视图类CView üCView类是MFC视图基类,实现框架窗口中的 客户区 24 可视对象类可视对象类(3)(3) nCView派生类 派生类类名 功能 CScrollView 带滚动 条的视图 CCtrlView 带树状列表框控件的视图 CEditView 带文本编辑器的视图 CFormView 基于表单模板的视图 CListView 带列表框控件的视图 CRecordView 可显示数据库记录 的视图 CRichEditView 带格式文本编辑器的视图 CPreviewView 支持打印预览的视图 25 可视对象类可视对象类(4)(4) n菜单类CMenu üCMenu类是MFC菜单类,实现菜单界面 n对话框类CDialog üCFileDialog:文件存取对话框 üCColorDialog:颜色选择对话框 üCFontDialog:字体选择对话框 üCPrintDialog:文件打印对话框 üCFindReplaceDialog:文本查找对话框 26 可视对象类可视对象类(5)(5) n控件类 控件类类名 功能 控件类类名 功能 CStatic 文本 CHotKeyCtrl 热键 CEdit 编辑 框 CRichEditCtrl 格式编辑 框 CScrollBar 滚动 条 CProgressCtrl 进度条 CSlideCtrl 游标 CSpinButtonCtrl 双向箭头 CComboBox 组合 框 CBitmapButton 位图按钮 CListBox 列表 框 CAnimateCtrl 动画显示 CButton 按钮 CToolTipCtrl 弹出式窗 口 27 可视对象类可视对象类(6)(6) n控件条类CControlBar üCControlBar是控件栏基类,实现工具条、 状态条与浮动对话框 nCControlBar派生类 üCStatusBar:状态条 üCToolBar:带位图按钮的工具条 üCDialogBar:控件条形式的浮动对话框 28 可视对象类可视对象类(7)(7) n绘图对象类CGdiObject üCGdiObject是GDI基类,实现绘图对象 nCGdiObject派生类 üCBitmap:位图操作接口 üCBrush:画刷 üCFont:字体 üCPalette:调色板 üCPen:画笔 üCRgn:椭圆或多边型域 29 可视对象类可视对象类(8)(8) n设备描述环境类CDC ü主要用来实现窗口绘制 nCDC派生类 üCPaintDC:绘图设备描述环境 üCClientDC:客户区的设备描述环境 üCWindowDC:窗口的设备描述环境 üCMetaFileDC:元文件的设备描述环境 30 通用类通用类(1)(1) n文件类CFile üCFile类是文件访问基类,实现文件输入与 输出操作 nCFile派生类 üCMemFile:驻内存文件访问接口 üCStdioFile:缓存流式文件访问接口 nCArchive类 üCFile类通常由CArchive间接访问 31 通用类通用类(2)(2) n异常类CException üCNotSupportException:不支持异常 üCMemoryException:内存异常 üCFileException:文件异常 üCResourceException:资源异常 üCOleException:OLE异常 üCDBException:数据库异常 üCUserException:用户操作异常 32 通用类通用类(3)(3) n模板收集类 üCArray:将数据存储到数组 üCList:将数据存储到链表 üCMap:关键字与数据的映射 33 OLEOLE类类 nOLE是对象链接与嵌入,对象服务体系结构 ü普通类:COleDocument、COleItem ü客户类:COleClientDoc、COleClientItem ü服务类:COleServer、COleTemplate ü可视编辑容器类:COleLinkingDoc ü数据传输类:COleDropSource、COleTarget 、COleDataSource、COleDataObject ü对话类:COleInsertDialog 34 ODBCODBC类类 nODBC类是MFC数据库访问类,可访问支持ODBC 的数据库系统,完成查询、更新等操作 üCDatabase:连接数据源 üCRecordset:数据源的一组记录 üCRecordView:记录的表单视图 üCFieldExchange:支持记录字段交换 üCLongBinary:存储二进制对象句柄 35 MFCMFC全局函数全局函数 n以Afx为前缀的函数 函数名 功能 AfxAbort 终止一个应用程序 AfxBeginThread 创建并执行一个线程 AfxEndThread 终止正在执行的线程 AfxMessageBox 弹出一个消息框 AfxGetApp 返回当前应用程序对象的指针 AfxGetInstanceHandle 返回当前应用程序对象的句柄 AfxRegisterWndClass 注册一个窗口类 36 MFCMFC向导功能向导功能(1)(1) 第1步:应用程序类型 第2步:数据库支持 例2-2 37 MFCMFC向导功能向导功能(2)(2) 第3步:OLE与ActiveX 第4步:用户界面 38 MFCMFC向导功能向导功能(3)(3) 第5步:应用程序风格 第6步:MFC类选择 39 MFCMFC向导功能向导功能(4)(4) nSingle Document nNo Database nNo OLE nTool Bar nStatus Bar nSystem Button 40 MFCMFC程序框架分析程序框架分析(1)(1) 例2-3 nWindows程序核心是CWinApp 41 MFCMFC程序框架分析程序框架分析(2)(2) nTest.cpp üCTestApp theApp üBOOL CTestApp:InitInstance() nWinMain.cpp üpThread-InitInstance() ünReturnCode=pThread-Run() üAfxWinTerm() 42 MFCMFC程序框架分析程序框架分析(3)(3) 43 MFCMFC程序框架分析程序框架分析(4)(4) n每次启动新的应用程序,WinMain函数都调用 InitInstance() ü创建并注册文档模板 CSingleDocTemplate* pDocTemplate; pDocTemplate=new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CTestDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CTestView); AddDocTemplate(pDocTemplate); 44 MFCMFC程序框架分析程序框架分析(5)(5) ü装载标准文件选项 ü创建主边框窗口 CMainFrame* pMainFrame=new CMainFrame; if(!pMainFrame-LoadFrame(IDR_MAINFRAME) return FALSE; m_pMainWnd=pMainFrame; pMainFrame-ShowWindow(m_nCmdShow); pMainFrame-UpdateWindow(); 45 MFCMFC程序框架分析程序框架分析(6)(6) nInitInstance():初始化应用程序 nRun():启动消息循环 nOnIdle():空闲处理 nExitInstance():终止应用程序 46 文档模板文档模板(1)(1) n文档模板用于存放与文档、视图和边框窗口相 关的信息 üCSingleDocTemplate 单文档模板 üCMultiDocTemplate 多文档模板 n传递给C*DocTemplate的资源符号串,包括7个 参数,每个参数用n隔开,用GetDocString可 获得每个参数 47 文档模板文档模板(2)(2) 参数名 含义义 WindowTitle 标题栏 中的应用程序名 DocName 默认文件名的固定部分 FileNewName 文档类型的名字(多文档情况) FilterName 文档类型和通配符过滤器的描 述 FilterExt 文档文件的扩展名 RegFileTypeId 注册表中登记的文档类型 RegFileTypeNam e 注册表中登记的文档类型名 n资源符号串 48 窗口类与窗口对象窗口类与窗口对象 49 消息的概念消息的概念 n消息处理机制是Windows核心,它是应用程序 运行的动力来源 n消息是系统定义的32位值,它唯一定义一个事 件,向Windows系统发出一个通知,告诉应用 程序某个事件发生 50 消息循环消息循环 nPeekMessage:查看消息队列,只起检测作用 nGetMessage:查看消息队列,将消息移走 nPreTranslateMessage:TranslateMessage的 预处理函数 nTranslateMessage:将虚拟键转化为字符码, 例如Shift+8* nDispatchMessage:消息分发到消息处理函数 51 消息映射表消息映射表 /TestView.h class CTestView : public CView protected: /AFX_MSG(CTestView) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnEditPaste(); /AFX_MSG DECLARE_MESSAGE_MAP() ; /TestView.cpp BEGIN_MESSAGE_MAP(CTestView, CView) /AFX_MSG_MAP(CTestView) ON_WM_LBUTTONDOWN() ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) /AFX_MSG_MAP END_MESSAGE_MAP() 52 消息控制机制消息控制机制(1)(1) n在CTestView:OnDraw()中 例2-4 pDC-TextOut(20,20,“Hello World!“); pDC-SelectStockObject(GRAY_BRUSH); pDC-Ellipse(20,50,100,130); 53 消息控制机制消息控制机制(2)(2) n鼠标控制消息 CDC *pDC=GetDC(); pDC-TextOut(point.x,point.y,“Mouse Clicked!“); ReleaseDC(pDC); 54 消息控制机制消息控制机制( (3 3) ) n鼠标控制消息 CClientDC cDC(this); cDC.TextOut(point.x,point.y,“Mouse Clicked!“); 55 消息控制机制消息控制机制( (4 4) ) n菜单控制消息 CDC *pDC=GetDC(); pDC-TextOut(20,120,“Menu Clicked!“); ReleaseDC(pDC); 56 趣味性例子趣味性例子(1)(1) n绘制一片绿色的叶子 例2-5 57 趣味性例子趣味性例子(2)(2) void CMyTreeView:OnDraw(CDC* pDC) int nTotalPoints=32000; /打印nTotalPoints个点 CRect rect; GetClientRect( int nX=rect.right/2; /(nX,nY)记录树的根坐标 int nY=rect.bottom*5/6; int nScale=(rect.rightrect.bottom?rect.bottom:rect.right)/15; COLORREF crColor=0x00FF00; double dX=0, dY=0; double dP; for(int i=0;i0.01 dY=0.44*dX+0.12*dY+1.00; pDC-SetPixel(nX+int(dX*nScale),nY-int(dY*nScale),crColor); 59 消息的种类消息的种类(1)(1) nWindows系统将各种事件以消息形式发送给目 标,目标根据消息内容进行处理 ü目标窗口 ü消息类型 ü参数wParam ü参数lParam 60 消息的种类消息的种类( (2 2) ) n标准Windows消息 ü窗口消息(WM_CREATE、WM_PAINT等)、鼠标消 息(WM_LBUTTONDOWN、WM_MOUSEMOVE等)、键 盘消息(WM_KEYDOWN、WM_CHAR等)、WM_TIMER n控件消息 ü从控件传送给父窗口的消息 n命令消息 ü用户界面对象(包括菜单、工具栏、加速键等 )的WM_COMMAND消息 61 消息处理过程消息处理过程( (1 1) ) n标准Windows消息不通过命令目标链,由发送消 息的窗口处理,处理函数在相应类中定义,通 过AFX_MSG区分 /AFX_MSG(CTestView) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnDestroy(); afx_msg void OnLButtonDown(UINT nFlags,CPoint point); /AFX_MSG 62 消息处理过程消息处理过程( (2 2) ) nWM_COMMAND能被更多的对象处理,包括应用程 序、窗口、文档与视图等 n命令消息通过命令目标链发送,每个目标都检 查自己的消息映射,决定能否处理消息 n命令目标链发送顺序:当前活动的子目标、自 己、其它目标 63 消息处理过程消息处理过程( (3 3) ) n命令处理顺序 接收命令的类类命令处处理顺顺序 MDI主边框窗口 当前MDI子窗口MDI主边框窗口 应用程序 SDI主边框窗口 或MDI子边框窗 口 当前视图 SDI主边框窗口或 MDI子边框窗口应用程序 视图视图视图相关文档 文档文档文档相关模板 对话框对话框对话框父窗口应用 程序 64 窗口消息窗口消息(1)(1) nWM_CREATE消息 ü当窗口对象生成后,系统发送WM_CREATE, 完成窗口的初始化 nWM_DESTROY消息 ü当应用程序退出时,系统发送WM_DESTROY, 完成某些收尾工作 nWM_PAINT消息 ü当窗口发生变化时,系统发送WM_PAINT,重 绘窗口并显示数据 65 窗口消息窗口消息(2)(2) n添加WM_CREATE消息 üClassWizardMessage MapsCTestView WM_CREATEAdd Function n编写WM_CREATE的响应函数 üCTestView:OnCreate()中 MessageBox(“完成窗口初始化!“); n添加WM_DESTROY消息 üCTestView:OnDestory()中 MessageBox(“完成窗口销毁!“); 例2-6 66 窗口消息窗口消息(3)(3) 67 窗口消息窗口消息(4)(4) n在CTestView类定义中 n在CTestView构造函数中 n在CTestView:OnDraw()中 m_Num=0; /初始化 private: int m_Num; m_Num+; CString str; str.Format(“窗口重绘次数:%d“,m_Num); pDC-TextOut(0,0,str); pDC-SelectStockObject(GRAY_BRUSH); pDC-Ellipse(0,20,200,220); 68 窗口消息窗口消息(5)(5) nWM_PAINTCTestView消息循环CView消息循 环CView:OnPaint()CView:OnDraw() 69 鼠标消息鼠标消息(1)(1) n当用户对鼠标进行操作时,会产生对应的消息 ,系统将消息发送给对应窗口 n鼠标消息主要包括: üWM_MOUSEMOVE 鼠标移动 üWM_LBUTTONDOWN 鼠标左键按下 üWM_RBUTTONDOWN 鼠标右键按下 üWM_LBUTTONUP 鼠标左键释放 üWM_RBUTTONUP 鼠标右键释放 üWM_LBUTTONDBLCLK 鼠标左键双击 70 鼠标消息鼠标消息(2)(2) n鼠标消息处理函数的参数:nFlag和point nnFlag表示鼠标按钮状态,鼠标事件发生时的 键盘某些键状态,每位由nFlag相应位表示 üMK_CONTROL、MK_SHIFT、MK_LBUTTON、 MK_MBUTTON、MK_RBUTTON npoint表示鼠标事件发生时的光标位置 71 鼠标消息鼠标消息(3)(3) n在CTestView:OnLButtonDown()中 n窗口最小化,然后最大化。哪些信息保留,哪 些信息消失?为什么?如何保留最后一次鼠标 单击信息? 例2-7 CDC *pDC=GetDC(); pDC-TextOut(point.x,point.y,“Mouse Clicked!“); ReleaseDC(pDC); 72 鼠标消息鼠标消息(4)(4) n在CTestView类定义中 n在CTestView:CTestView()中 private: CPoint m_Pos; CString m_Des; m_Pos=CPoint(0,0); m_Des.Empty(); 73 鼠标消息鼠标消息(5)(5) n在CTestView:OnLButtonDown()中 n在CTestView:OnDraw()中 m_Pos=point; if(nFlags else m_Des=“单击鼠标左键“; Invalidate(true); pDC-TextOut(m_Pos.x,m_Pos.y,m_Des); 74 鼠标消息鼠标消息(6)(6) n窗口重绘的结果 75 键盘键盘消息消息(1)(1) n用户对键盘进行操作,产生相应的键盘消息, 系统将消息发送给相应窗口 n键盘消息主要包括: üWM_KEYDOWN:键盘按下 üWM_KEYUP:键盘弹起 üWM_CHAR:输入一个字符 76 键盘键盘消息消息( (2 2) ) n在CTestView:OnChar()中 void CTestView:OnChar(UINT nChar,UINT nRepCnt,UINT nFlags) CString str; str.Format(“按下%c键!“,nChar); MessageBox(str,“键盘按键“); 例2-8 77 键盘键盘消息消息( (3 3) ) n特殊键处理,例如F1、F2、等 BOOL CTestView:PreTranslateMessage(MSG* pMsg) if(pMsg-message=WM_KEYDOWN) if(pMsg-wParam=VK_F1) MessageBox(“按下F1键“); if(pMsg-wParam=VK_UP) MessageBox(“按下键“); 78 菜单与工具栏消息菜单与工具栏消息(1)(1) n添加菜单消息 üResourceViewMenuIDR_MAINFRAME ü一级菜单项MyMenu二级菜单项Execute (ID_EXECUTE) ü一级菜单项MyMenu二级菜单项Font (ID_FONT) n在CTestView:OnExecute()中 üMessageBox(“菜单创建成功!“); 例2-9 79 菜单与工具栏消息菜单与工具栏消息(2)(2) n添加工具栏消息 üResourceViewToolBarIDR_MAINFRAME ü添加按钮(ID_COLOR) n在CTestView:OnColor()中 CColorDialog Dlg; Dlg.DoModal(); 80 WM_TIMERWM_TIMER消息消息(1)(1) nWM_TIMER消息是一种计时器消息 n通过SetTimer()函数设置时钟,当预定的时间 到达,系统产生WM_TIMER消息,并通过参数表 明是哪个时钟 n用户用于进行周期性处理 81 WM_TIMERWM_TIMER消息消息(2)(2) nWM_CREATE消息,在OnCreate()中 SetTimer(1,2000,NULL); /设置计时器,ID 号为1,间隔2000ms,消息处理函数默认 nWM_TIMER消息,在OnTimer()中 if(nIDEvent=1) nWM_DESTROY消息,在OnDestroy()中 KillTimer(1); /清除计时器1 82 简单动画程序设计简单动画程序设计 n使用WM_TIMER消息 n异或方式制作动画:SetROP2(R2_XORPEN) 例2-10 83 其他消息其他消息(1)(1) n有些消息不常出现,ClassWizard中没有封装 ,因此找不到相应消息,但系统确实存在该消 息,需要手工处理消息 n典型的是热键消息WM_HOTKEY。用户可以定义 一个热键,不论是前台或后台程序,只要用户 按这个热键,程序立即切换到前台,并收到一 个热键消息,参数表明哪个热键按下 84 其他消息其他消息(2)(2) n在CTestView类定义中 void OnHotkey(WPARAM wParam,LPARAM lParam); n在CTestView类中 ON_MESSAGE(WM_HOTKEY,OnHotkey) n在CTestView:OnCreate()中 RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_A LT,'z'); RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_A LT,'Z'); 85 其他消息其他消息(3)(3) n在CTestView:OnHotkey()中 n在CTestView:OnDestroy()中 if(wParam=1001|wParam=1002) MessageBox(“接收热键消息!“); UnregisterHotKey(m_hWnd,1001); UnregisterHotKey(m_hWnd,1002); 86 自定义消息自定义消息(1)(1) n用户有时需要定义内部消息,以区别系统定义 的消息,完成用户自定义的处理 n这些消息是用户定义,系统不知道消息存在, 通过PostMessage()或SendMessage()发送 n消息是一个整数,系统已使用一部分。小于 WM_USER的整数保留,大于的供用户使用 n用户自定义消息的方式 #define WM_MYMESSAGE WM_USER+N 87 自定义消息自定义消息(2)(2) n自定义消息的操作步骤 ü定义自己的窗口消息 ü在适当位置声明消息处理函数 ü将消息处理函数与消息对应 ü实现消息处理函数 ü向发送消息者提供窗口句柄 88 自定义消息自定义消息(3)(3) n声明用户自定义消息 #define WM_MYMESSAGE WM_USER+1 n在CTestView类定义中 void OnMyMessage(WPARAM wParam,LPARAM lParam); n在CTestView类中,建立消息映射关系 ON_MESSAGE(WM_MYMESSAGE,OnMyMessage) 例2-11 89 自定义消息自定义消息(4)(4) n在CTestView:OnMyMessage()中 void CTestView:OnMyMessage(WPARAM wParam, LPARAM lParam) CString str; str.Format(“消息参数%d和%d“,wParam,lParam); MessageBox(str); 90 自定义消息自定义消息(5)(5) n在CTestView:OnLButtonUp()中 PostMessage(WM_MYMESSAGE,1,2); n在CTestView:OnChar()中 SendMessage(WM_MYMESSAGE,3,4); 91 有趣的分形理论有趣的分形理论(1)(1) n分形理论建立于20世纪70年代末,它的出现震 惊科学界,被列入20项重大科学发现 n在欧几里得几何学无能为力的领域,分形理论 脱颖而出。分形是对没有特征长度、具有一定 意义的自相似图形或结构的总称 例2-12 92 有趣的分形理论有趣的分形理论(2)(2) void CTestView:OnDraw(CDC* pDC) CRect rect; this-GetClientRect( int iOx = rect.right/2; int iOy = rect.bottom/2; int iWidth = rect.right-rect.left; int iHeight = rect.bottom-rect.top; int iR = (iWidth iHeight ? iHeight : iWidth)/3; CString str; str.Format(“单文档,View(%d,%d,%d,%d)“,rect.left,rect.top,rect.right,rect.bottom); pDC-TextOut(0,0, str); pDC-Ellipse(iOx-iR, iOy-iR, iOx+iR, iOy+iR); pDC-SetPixel(iOx, iOy, 0x000000); CPoint A, B, C, D, E; A.x = iOx; A.y = iOy-iR; B.x = int(iOx + iR*cos(c_dPi/10); B.y = int(iOy-iR*sin(c_dPi/10); C.x = int(iOx + iR*cos(3*c_dPi/10); C.y = int(iOy+iR*sin(3*c_dPi/10); D.x = int(iOx - iR*cos(3*c_dPi/10); D.y = int(iOy+iR*sin(3*c_dPi/10); E.x = int(iOx - iR*cos(c_dPi/10); E.y = int(iOy-iR*sin(c_dPi/10); pDC-MoveTo(A); pDC-LineTo(C); pDC-LineTo(E); pDC-LineTo(B); pDC-LineTo(D); pDC-LineTo(A); 93 有趣的分形理论有趣的分形理论(3)(3) void CTestView:OnDraw(CDC* pDC) m_pDC=pDC; CRect rect; this-GetClientRect( int iOx=rect.right/2; int iOy=rect.bottom/2; DrawRect(iOx, iOy, (iOxiOy?iOy:iOx)/3); void CTestView:DrawRect(int iX, int iY, int iR) if(iR0) DrawRect(iX-iR, iY+iR, iR/2); DrawRect(iX+iR, iY+iR, iR/2); DrawRect(iX-iR, iY-iR, iR/2); DrawRect(iX+iR, iY-iR, iR/2); m_pDC-Rectangle(iX-iR, iY-iR, iX+iR, iY+iR); 94 第第2 2次作业次作业 n编程实现键盘鼠标测试程序,满足以下要求: ü按下键盘任意键,屏幕显示按键信息 ü单击鼠标左键,屏幕显示鼠标信息 ü假设鼠标右键失灵,用Ctrl+鼠标

    注意事项

    本文(可视化编程课件02MFC.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开