




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆邮电大学计算机科学与技术学院冯潇fengxiao 鼠标和菜单 GDI相关知识回顾 Windows中负责图形输出的是图形设备接口 GraphicsDeviceInterface GDI的作用保证物理设备和应用程序是松耦合的关系GDI将设备的绘图特性抽象为设备环境 DeviceContext DC GDI提供一些抽象图形的对象 如画笔 画刷 字体 完成图形绘制画笔类Pen 控制输出线条的颜色 粗细 样式等 请查阅MSDN了解画笔类画刷类Brush 用于填充封闭图形的内部区域 可控制填充的颜色 样式等字体类Font 用于控制文本输出的字体 大小 CDC类常用派生类简介 选择合适的设备环境类完成输出 MFC直接封装的windows类别 画封闭图形的CDC函数 主要内容 理解什么是消息映射 什么是消息处理函数学会利用工具完成消息映射理解windows资源 会编辑 编译资源能使用鼠标和菜单的常见消息完成简单程序学会完成逻辑坐标和设备坐标的相互转换 重点 难点 会映射常见的消息WM MOUSEMOVE WM LBUTTONDOWN WM LBUTTONUPWM COMMAND学会几个重要的类成员函数CWnd Invalidate CWnd GetClientRect CDC SetViewportOrg CDC SetROP2 学会利用现成工具添加类的数据成员和成员函数 任务1 用鼠标在屏幕上画线 用鼠标在屏幕上画绿色 线条粗为5的实线条 仔细分析待实现的功能 鼠标左键点下 记录线条起点应具有CPoint类型对象记录起点在鼠标左键按下的情况下移动鼠标 移动过程中画出1个像素宽的黑色直线如果鼠标左键没有按下 则移动过程中不应该出现线条 这里需要判断鼠标是否按下应具有CPoint类型对象记录移动过程中的当前点从起点到当前点画一条线 黑色 1个单位宽 释放鼠标左键时 记录线条终点 从起点到终点画出一条绿色 5个单位宽的实线条应具有CPoint类型对象记录终点从起点到当前点画一条线 绿色 5个单位宽 客户区常见鼠标消息 非客户区常见鼠标消息 处理鼠标消息 消息处理函数当特定消息发送到窗口后 程序调用的处理该消息的函数称为消息处理函数消息映射将特定消息和消息处理函数关联起来的过程称为消息映射MFC中进行消息映射的方法手动编写消息映射宏利用ClassWizard 类向导 完成消息映射 利用ClassWizard完成消息映射 在视图类中右键选中 AddWindowsMessagehandler 消息处理函数 voidCTestView OnLButtonDown UINTnFlags CPointpoint CScrollView OnLButtonDown nFlags point point指出左键按下时 光标所在位置nFlags指出左键按下时 鼠标键 shift键 control键的状态 添加数据成员 在视图类中右键选中 AddWindowsMessagehandler 利用类向导创建以下三个消息处理函数 视图类CPP文件的消息映射宏 AFX MSG CTestView afx msgvoidOnLButtonDown UINTnFlags CPointpoint afx msgvoidOnLButtonUp UINTnFlags CPointpoint afx msgvoidOnMouseMove UINTnFlags CPointpoint AFX MSGDECLARE MESSAGE MAP 添加以下数据成员 在MFC中 类的数据成员统一以前缀 m 开始命名CPointm from 记录鼠标左键按下时的坐标CPointm oldPoint 记录鼠标移动中当前点的坐标BOOLm down 鼠标移动过程中鼠标左键是否按下 鼠标左键按下的消息处理函数 voidCTestView OnLButtonDown UINTnFlags CPointpoint 从CView类继承下来的消息处理函数CView OnLButtonDown nFlags point 以下为手动添加代码m down TRUE m from point 保存线条起点m oldPoint point 初始化前一当前点的坐标 注 m down m from应在视图类的构造函数中合理初始化 移动鼠标的消息处理函数 voidCMouseView OnMouseMove UINTnFlags CPointpoint CView OnMouseMove nFlags point if m IsDown CClientDCdc this dc SetROP2 R2 NOT dc MoveTo m from dc LineTo m oldPoint dc MoveTo m from dc LineTo point m oldPoint point CDC类常用派生类简介 选择合适的设备环境类完成输出 CDC SetROP2 intSetROP2 intnDrawMode 参数nDrawMode指定新的画图模式R2 BLACK 像素总是黑色R2 WHITE 像素总是白色R2 COPYPEN 像素总是画笔的颜色R2 NOT 像素总是屏幕像素取反的颜色函数返回值返回调用该函数前的画图模式 鼠标左键释放的消息处理函数 voidCMouseView OnLButtonUp UINTnFlags CPointpoint CView OnLButtonUp nFlags point if m IsDown CClientDCdc this dc SetROP2 R2 NOT dc MoveTo m from dc LineTo m oldPoint CPenpen PS SOLID 5 RGB 0 255 0 dc SelectObject 任务2 控制下拉菜单 定义一个下拉菜单 该菜单包含三个选项 画圆 三角形 椭圆 可在画圆的菜单中再设级联菜单 控制图形的颜色 可选颜色有红色 绿色和蓝色 思路 按题目要求编辑菜单项根据菜单项设置加速键 以上两项都在ResourceView 中完成利用类向导为菜单建立消息映射 并编写完成的消息处理函数点击菜单项会产生什么消息 对应什么消息处理函数画图功能究竟在哪个函数中完成 定义数据成员 保存用户单击菜单项时选择的图形和颜色思考数据成员的类型根据用户选择的类型在OnDraw 中画图和填色控制程序在屏幕中心输出图形 windows资源 资源即数据 包含在应用程序的 exe文件中 通常资源留在磁盘上 只有当windows需要某一资源时 才将其装入内存中VC中有十种资源 分别是加速键 位图 光标 对话框 图标 菜单 串表 工具条和版本信息资源在称为 资源描述文件 rc 的ASCII码文件中定义 VC对所有类型的资源都提供了资源编辑器进行可视化编辑资源可在 ResourceView 中进行编辑 菜单资源 windows采用特定的前缀符对windows内部的资源进行分类本题菜单编辑方法见书P196 菜单消息处理 当点击菜单项时 会触发WM COMMAND消息利用类向导完成消息映射 应该完成的消息映射 在视图类的CPP文件中BEGIN MESSAGE MAP CMenu shapeView CView AFX MSG MAP CMenu shapeView ON COMMAND ID CIRCLE OnCircle ON COMMAND ID ELLIPSE OnEllipse ON COMMAND ID TRIANGLE OnTriangle ON COMMAND ID BLUE OnBlue ON COMMAND ID GREEN OnGreen ON COMMAND ID RED OnRed AFX MSG MAP END MESSAGE MAP 需定义的数据成员 颜色COLORREFm color 形状intm shape 1代表圆 2代表三角形 3代表椭圆这些数据成员通过类向导定义首先应该在视图类的构造函数中初始化 然后在具体消息处理函数中 根据用户选择的菜单项重新赋值 CWnd Invalidate voidInvalidate BOOLbErase TRUE 作用使整个客户区域失效 并发生WM PAINT消息到消息队列 该消息导致失效的区域重新绘制参数bErase指定被更新区域的背景色是否需要擦出如果bErase为TRUE 则背景在BeginPaint 被调用时擦除 用户选择绘制圆 voidCMenu shapeView OnCircle TODO Addyourcommandhandlercodeherem shape 1 Invalidate 用户选择红色 voidCMenu shapeView OnRed TODO Addyourcommandhandlercodeherem color RGB 255 0 0 Invalidate 设置客户区中心为坐标原点 思路取得客户区矩形大小 通过窗口类的GetClientRect 让该矩形宽度的一半作为坐标原点的横坐标让该矩形高度度的一半作为坐标原点的纵坐标通过CDC SetViewportOrg 修改坐标原点该坐标系的横坐标以向右为正 纵坐标以向下为正 OnDraw voidCMenu shapeView OnDraw CDC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线上咨询定制方案模板
- 办公室吃烤鱼营销方案
- 2025年英语四六级考试阅读与写作专项训练试卷
- 2025康复医学治疗技术(副高级职称)经典例题含答案详解
- 2025年资料员之资料员基础知识模拟试题含完整答案详解【考点梳理】
- 2025年执法资格检测卷一套附答案详解
- 2025年自考专业(计算机应用)考前冲刺测试卷及答案详解【夺冠系列】
- 2024年医学检验(士)真题附答案详解【完整版】
- 难点解析-人教版9年级数学下册投影与视图重点解析试题(含详细解析)
- 全国统考教师资格考试《教育教学知识与能力(小学)》真题含答案详解(能力提升)
- 警用侦查无人机在侦查行动中的应用分析报告
- 2024年春季云南省高中学业水平合格性考试化学试卷真题(含答案)
- 石膏板项目可行性研究报告
- 2025年肠造口护理及并发症防治考核试题及答案
- 勘查地球物理导论课件
- 腹痛教学课件
- 2025年全国青少年学宪法讲宪法知识竞赛高中答案
- 学习《水利水电工程生产安全重大事故隐患判定导则-SLT 842》课件
- 2025年中级(四级)物业管理师职业技能鉴定《理论知识》真题卷(后附答案和解析)
- 2025年放射工作人员培训考试试题(+答案)
- 2025 临终患者症状管理课件
评论
0/150
提交评论