欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第10章 屏幕绘图.ppt

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

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

    第10章 屏幕绘图.ppt

    第第1010章章 屏幕绘图屏幕绘图 本章要点本章要点本章要点本章要点通过本章的学习,使读者:通过本章的学习,使读者:通过本章的学习,使读者:通过本章的学习,使读者:了解设备环境和设备环境类了解设备环境和设备环境类了解设备环境和设备环境类了解设备环境和设备环境类 熟练使用设备环境类及图形设备接口熟练使用设备环境类及图形设备接口熟练使用设备环境类及图形设备接口熟练使用设备环境类及图形设备接口(GDIGDI)对象进行绘图)对象进行绘图)对象进行绘图)对象进行绘图 掌握位图的显示技术掌握位图的显示技术掌握位图的显示技术掌握位图的显示技术 熟练掌握工具栏、菜单设计熟练掌握工具栏、菜单设计熟练掌握工具栏、菜单设计熟练掌握工具栏、菜单设计 掌握快捷菜单的设计和实现技术掌握快捷菜单的设计和实现技术掌握快捷菜单的设计和实现技术掌握快捷菜单的设计和实现技术10.1 绘图程序绘图程序如何实现?如何实现?如何实现?如何实现?(1)(1)绘制绘制绘制绘制“直线直线直线直线”、“矩形矩形矩形矩形”、“圆角矩形圆角矩形圆角矩形圆角矩形”和和和和“椭圆椭圆椭圆椭圆”基本图形。基本图形。基本图形。基本图形。(2)(2)能设置画笔的粗细(线宽)和绘图颜色。能设置画笔的粗细(线宽)和绘图颜色。能设置画笔的粗细(线宽)和绘图颜色。能设置画笔的粗细(线宽)和绘图颜色。(3)(3)提供菜单、工具栏提供菜单、工具栏提供菜单、工具栏提供菜单、工具栏 10.2 设备环境和设备环境类设备环境和设备环境类10.2.1 概述概述设备环境类设备环境类CDC及其派生类如图及其派生类如图10-2所示所示 图10-2 CDC与其子类继承图CDCCClientDCCPaintDCCWindowDCCMetaFileDC10.2.2 认识设备环境类认识设备环境类(1 1)在视图类的在视图类的在视图类的在视图类的OnDrawOnDraw函数中绘图函数中绘图函数中绘图函数中绘图(2 2)在视图类的一般函数中绘图在视图类的一般函数中绘图在视图类的一般函数中绘图在视图类的一般函数中绘图10.3 绘图工具绘图工具CGdiObjectCPenCBrushCFontCBitmapCPaletteCRgn图10-4 MFC的GDI类继承图CGdiObjectCPenCCGdiObjectCPenCBrushCFontCBitmaBrushCFontCBitmapCPaletteCRgnpCPaletteCRgn图图图图10-4 MFC10-4 MFC的的的的GDIGDI类继类继类继类继承图承图承图承图 CPenCPen(画笔类画笔类画笔类画笔类)CBrushCBrush(画刷类画刷类画刷类画刷类)CFontCFont(字体类字体类字体类字体类)CBitmapCBitmap(位图类位图类位图类位图类)CPaletteCPalette(调色板(调色板(调色板(调色板类)类)类)类)CRgnCRgn(绘图区域类绘图区域类绘图区域类绘图区域类)10.3.1 画笔:画笔:CPen类类在使用画笔之前,首先必须构造画笔对象,有两在使用画笔之前,首先必须构造画笔对象,有两在使用画笔之前,首先必须构造画笔对象,有两在使用画笔之前,首先必须构造画笔对象,有两种方法种方法种方法种方法(1)(1)构造和初始化对象都在带参数构造和初始化对象都在带参数构造和初始化对象都在带参数构造和初始化对象都在带参数(2)(2)的构造函数中一步完成的构造函数中一步完成的构造函数中一步完成的构造函数中一步完成 (2)(2)构造和初始化分两步完成,构造和初始化分两步完成,构造和初始化分两步完成,构造和初始化分两步完成,构造由不带参数的构造函数完成,构造由不带参数的构造函数完成,构造由不带参数的构造函数完成,构造由不带参数的构造函数完成,而初始化由初始化函数完成而初始化由初始化函数完成而初始化由初始化函数完成而初始化由初始化函数完成 例如,用一支颜色为绿色、宽度为例如,用一支颜色为绿色、宽度为例如,用一支颜色为绿色、宽度为例如,用一支颜色为绿色、宽度为2 2个象素的实心个象素的实心个象素的实心个象素的实心画笔画线和画椭圆的程序段如下画笔画线和画椭圆的程序段如下画笔画线和画椭圆的程序段如下画笔画线和画椭圆的程序段如下:CDC *CDC *pDCpDC=GetDCGetDC();();/获得显示设备环境获得显示设备环境获得显示设备环境获得显示设备环境DCDC的指针的指针的指针的指针pDCpDC CPenCPen newPennewPen;newPen.CreatePen(PS_SOLID,2,RGB(0,255,0);newPen.CreatePen(PS_SOLID,2,RGB(0,255,0);CPenCPen*poldpenpoldpen=pDCpDC-SelectObject(&newPenSelectObject(&newPen);/);/将创建的将创建的将创建的将创建的画笔选入内存画笔选入内存画笔选入内存画笔选入内存DCDC,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔 pDCpDC-MoveTo(10,10);-MoveTo(10,10);/调用调用调用调用MoveToMoveTo函数,定位于函数,定位于函数,定位于函数,定位于点(点(点(点(10,1010,10)pDCpDC-LineTo(100,100);-LineTo(100,100);/调用调用调用调用LineToLineTo函数,画线至点函数,画线至点函数,画线至点函数,画线至点(100,100)(100,100)pDCpDC-Ellipse(120,120,160,160);-Ellipse(120,120,160,160);/调用画椭圆函数调用画椭圆函数调用画椭圆函数调用画椭圆函数EllipseEllipse pDCpDC-SelectObject(poldpenSelectObject(poldpen););/恢复内存恢复内存恢复内存恢复内存DCDC中原有的画笔中原有的画笔中原有的画笔中原有的画笔 ReleaseDC(pDCReleaseDC(pDC););/释放显示释放显示释放显示释放显示DCDC10.3.2 画刷:画刷:CBrush类类 在使用画笔、画刷之前,首先必须构造画笔、画刷对象,在使用画笔、画刷之前,首先必须构造画笔、画刷对象,在使用画笔、画刷之前,首先必须构造画笔、画刷对象,在使用画笔、画刷之前,首先必须构造画笔、画刷对象,有两种方法有两种方法有两种方法有两种方法:(1)(1)构造和初始化对象都在带参数的构造函数中一步完成,构造和初始化对象都在带参数的构造函数中一步完成,构造和初始化对象都在带参数的构造函数中一步完成,构造和初始化对象都在带参数的构造函数中一步完成,(2)(2)如:如:如:如:CBrushCBrush newBrush(RGB(0,0,255);newBrush(RGB(0,0,255);/蓝色画刷蓝色画刷蓝色画刷蓝色画刷(2)(2)构造和初始化分两步完成,构造由不带参数的构造函构造和初始化分两步完成,构造由不带参数的构造函构造和初始化分两步完成,构造由不带参数的构造函构造和初始化分两步完成,构造由不带参数的构造函数完成,而初始化由初始化函数完成,数完成,而初始化由初始化函数完成,数完成,而初始化由初始化函数完成,数完成,而初始化由初始化函数完成,如:如:如:如:CBrushCBrush newBrushnewBrush;newBrush.CreateSolidBrush(RGB(0,255,0);newBrush.CreateSolidBrush(RGB(0,255,0);例如,例如,例如,例如,用一支颜色为用一支颜色为用一支颜色为用一支颜色为绿色、宽度为绿色、宽度为绿色、宽度为绿色、宽度为2 2个象个象个象个象素的实心画笔画椭圆,素的实心画笔画椭圆,素的实心画笔画椭圆,素的实心画笔画椭圆,并用蓝色画刷填充椭并用蓝色画刷填充椭并用蓝色画刷填充椭并用蓝色画刷填充椭圆内部的程序段如下圆内部的程序段如下圆内部的程序段如下圆内部的程序段如下(如果不填充椭圆内(如果不填充椭圆内(如果不填充椭圆内(如果不填充椭圆内部,则相关的画刷语部,则相关的画刷语部,则相关的画刷语部,则相关的画刷语句省略)。句省略)。句省略)。句省略)。CDC*CDC*pDCpDC=GetDCGetDC();();/获得显示设备环境获得显示设备环境获得显示设备环境获得显示设备环境DCDC的指针的指针的指针的指针pDCpDC CPenCPen newPennewPen;newPen.CreatePen(PS_SOLID,2,RGB(0,255,0);newPen.CreatePen(PS_SOLID,2,RGB(0,255,0);CBrushCBrush newBrushnewBrush;newBrush.CreateSolidBrush(RGB(0,255,0);newBrush.CreateSolidBrush(RGB(0,255,0);CPenCPen*poldpenpoldpen=pDCpDC-SelectObject(&newPenSelectObject(&newPen);/);/将创建的将创建的将创建的将创建的画笔选入内存画笔选入内存画笔选入内存画笔选入内存DCDC,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔 CBrushCBrush*poldbrushpoldbrush=pDCpDC-SelectObject(&newBrushSelectObject(&newBrush););/将创建的画刷选入内存将创建的画刷选入内存将创建的画刷选入内存将创建的画刷选入内存DCDC,同时暂时挤出并保存原画刷,同时暂时挤出并保存原画刷,同时暂时挤出并保存原画刷,同时暂时挤出并保存原画刷pDCpDC-MoveTo(10,10);-MoveTo(10,10);/调用调用调用调用MoveToMoveTo函数,定函数,定函数,定函数,定点到点(点到点(点到点(点到点(10,1010,10)pDCpDC-LineTo(100,100);-LineTo(100,100);/调用调用调用调用LineToLineTo函数,函数,函数,函数,画线到点画线到点画线到点画线到点(100,100)(100,100)pDCpDC-Ellipse(120,120,160,160);-Ellipse(120,120,160,160);/调用画椭圆函数调用画椭圆函数调用画椭圆函数调用画椭圆函数EllipseEllipse pDCpDC-SelectObject(poldpenSelectObject(poldpen););/恢复内存恢复内存恢复内存恢复内存DCDC中原中原中原中原有的画笔有的画笔有的画笔有的画笔pDCpDC-SelectObject(poldbrushSelectObject(poldbrush););/恢复内存恢复内存恢复内存恢复内存DCDC中原有的画刷中原有的画刷中原有的画刷中原有的画刷ReleaseDC(pDCReleaseDC(pDC););/释放显示释放显示释放显示释放显示DCDC10.3.3 字体:字体:CFont类类创建字体由两步完成创建字体由两步完成创建字体由两步完成创建字体由两步完成(1)(1)定义一个定义一个定义一个定义一个CFontCFont类的对象,应用框架会调用类的对象,应用框架会调用类的对象,应用框架会调用类的对象,应用框架会调用构造函数,如:构造函数,如:构造函数,如:构造函数,如:CFontCFont myFontmyFont;(2)(2)调用调用调用调用CFontCFont类的创建字体函数,从而将构造类的创建字体函数,从而将构造类的创建字体函数,从而将构造类的创建字体函数,从而将构造的的的的CFontCFont对象与对象与对象与对象与WindowsWindows的某种字体相关联。的某种字体相关联。的某种字体相关联。的某种字体相关联。BOOL BOOL CreateFont(intCreateFont(int nHeightnHeight,/字体高度字体高度字体高度字体高度 intint nWidthnWidth,/字符平均宽度字符平均宽度字符平均宽度字符平均宽度 intint nEscapementnEscapement,/文本行角度文本行角度文本行角度文本行角度 intint nOrientationnOrientation,/字符角度字符角度字符角度字符角度 intint nWeightnWeight,/字符粗细度字符粗细度字符粗细度字符粗细度 BYTE BYTE bItalicbItalic,/斜体斜体斜体斜体 BYTE BYTE bUnderlinebUnderline,/下划线下划线下划线下划线 BYTE BYTE cStrikeOutcStrikeOut,/删除线删除线删除线删除线 BYTE BYTE nCharSetnCharSet,/字符集字符集字符集字符集 BYTE BYTE nOutPrecisonnOutPrecison,/字体输出结果和要求的匹配程度字体输出结果和要求的匹配程度字体输出结果和要求的匹配程度字体输出结果和要求的匹配程度 BYTE BYTE nClipPrecisonnClipPrecison,/如何裁剪落于裁剪区之外的字符如何裁剪落于裁剪区之外的字符如何裁剪落于裁剪区之外的字符如何裁剪落于裁剪区之外的字符 BYTE BYTE nQualitynQuality,/字体属性匹配的精确程度字体属性匹配的精确程度字体属性匹配的精确程度字体属性匹配的精确程度 BYTE BYTE nPitchAnFamilynPitchAnFamily,/字体间距和字体簇字体间距和字体簇字体间距和字体簇字体间距和字体簇BYTE BYTE lpszFacenamelpszFacename /字体名称字体名称字体名称字体名称););););10.4 矢量图形矢量图形10.4.1 10.4.1 绘图模式绘图模式绘图模式绘图模式10.4.2 10.4.2 基本矢量图形基本矢量图形基本矢量图形基本矢量图形 1 1点点点点 2 2直直直直 线线线线BOOL BOOL LineTo(intLineTo(int x,x,intint y);y);BOOL BOOL LineTo(POINTLineTo(POINT point);point);3矩矩 形形 CPaintDCCPaintDC dc(thisdc(this););dc.Rectangle(120,120,160,160);dc.Rectangle(120,120,160,160);4.4.椭椭椭椭 圆圆圆圆 BOOL BOOL Ellipse(intEllipse(int x1,x1,intint y1,y1,intint x2,x2,intint y2)y2);BOOL BOOL Ellipse(LPCRECTEllipse(LPCRECT lpRectlpRect););10.5 位图显示位图显示10.5.1 10.5.1 CBitmapCBitmap类类类类CBitmapCBitmap类类类类封封封封装装装装了了了了WindowsWindows的的的的GDIGDI位位位位图图图图操操操操作作作作所所所所需需需需的的的的大大大大部部部部分分分分函函函函数数数数。其其其其中中中中,LoadBitmapLoadBitmap是是是是位位位位图图图图的的的的初初初初始始始始化函数,其函数原型如下:化函数,其函数原型如下:化函数,其函数原型如下:化函数,其函数原型如下:BOOL BOOL LoadBitmapLoadBitmap(LPCTSTR LPCTSTR lpszResourceNamelpszResourceName);BOOL BOOL LoadBitmapLoadBitmap(UINT UINT nIDResourcenIDResource);10.5.2 GDI位图的显示位图的显示 调用调用调用调用CBitmapCBitmap类的类的类的类的CreateBitmapCreateBitmap、CreateCompatibleBitmapCreateCompatibleBitmap以及以及以及以及CreateBitmapIndirectCreateBitmapIndirect函数函数函数函数创建一个适当的位图对象;创建一个适当的位图对象;创建一个适当的位图对象;创建一个适当的位图对象;调用调用调用调用CDC:CreateCompatibleDCCDC:CreateCompatibleDC函数创建一个内存设函数创建一个内存设函数创建一个内存设函数创建一个内存设备环境,以便位图在内存中保存下来,并与指定设备(窗备环境,以便位图在内存中保存下来,并与指定设备(窗备环境,以便位图在内存中保存下来,并与指定设备(窗备环境,以便位图在内存中保存下来,并与指定设备(窗口设备)环境相兼容;口设备)环境相兼容;口设备)环境相兼容;口设备)环境相兼容;调用调用调用调用CDC:SelectObjectCDC:SelectObject函数将位图对象选入内存设备函数将位图对象选入内存设备函数将位图对象选入内存设备函数将位图对象选入内存设备环境中;环境中;环境中;环境中;调用调用调用调用CDC:BitBltCDC:BitBlt或或或或CDC:StretchBltCDC:StretchBlt函数将位图复制到函数将位图复制到函数将位图复制到函数将位图复制到实际设备环境中;实际设备环境中;实际设备环境中;实际设备环境中;使用之后,恢复原来的内存设备环境。使用之后,恢复原来的内存设备环境。使用之后,恢复原来的内存设备环境。使用之后,恢复原来的内存设备环境。10.5.3 BMP文件的显示文件的显示(1)(1)定义一个定义一个定义一个定义一个HBITMAPHBITMAP类型变量类型变量类型变量类型变量bitmapbitmap,通过它,通过它,通过它,通过它的的的的LoadImageLoadImage函数将指定的位图文件读取进来;函数将指定的位图文件读取进来;函数将指定的位图文件读取进来;函数将指定的位图文件读取进来;(2)(2)创建兼容的内存设备描述表,并通过创建兼容的内存设备描述表,并通过创建兼容的内存设备描述表,并通过创建兼容的内存设备描述表,并通过SelectObjectSelectObject()()将位图选入内存设备描述表中;将位图选入内存设备描述表中;将位图选入内存设备描述表中;将位图选入内存设备描述表中;(3)(3)调用调用调用调用BitBltBitBlt函数将位图绘制在客户区。函数将位图绘制在客户区。函数将位图绘制在客户区。函数将位图绘制在客户区。编程要点编程要点编程要点编程要点 10.6 创建绘图程序创建绘图程序 10.6.1 10.6.1 创建绘图程序工程创建绘图程序工程创建绘图程序工程创建绘图程序工程10.6.2 工具栏的可视化设计工具栏的可视化设计1编辑绘图工具按钮编辑绘图工具按钮2设置工具按钮设置工具按钮10.7 实现程序的绘图功能实现程序的绘图功能10.7.1 设计设计CMyDrawView类相关变量类相关变量1.添加数据成员添加数据成员图图图图10-10 10-10 快捷菜单快捷菜单快捷菜单快捷菜单CPointCPoint m_poldm_pold;CPointCPoint m_pnewm_pnew;BOOL BOOL m_bdoingm_bdoing;COLORREF COLORREF m_colorm_color;intint m_widthm_width;intint m_typem_type;CBitmapCBitmap*m_pbmpm_pbmp;CDC*CDC*m_pmdcm_pmdc;intint m_nmym_nmy;intint m_nmxm_nmx;2.在构造函数中,初始化数据成员在构造函数中,初始化数据成员 m_bdoingm_bdoing=FALSE;=FALSE;m_typem_type=0;=0;m_widthm_width=1;=1;m_colorm_color=RGB(0,0,255);=RGB(0,0,255);m_pmdcm_pmdc=new CDC;=new CDC;m_pbmpm_pbmp=new=new CBitmapCBitmap;3.在析构函数中,释放有内存申请的变量在析构函数中,释放有内存申请的变量delete delete m_pmdcm_pmdc;delete delete m_pbmpm_pbmp;10.7.2 绘图环境的初始化绘图环境的初始化 在视图类中,添加在视图类中,添加在视图类中,添加在视图类中,添加WM_CREATEWM_CREATE消息响应函数,在函数消息响应函数,在函数消息响应函数,在函数消息响应函数,在函数中编写代码中编写代码中编写代码中编写代码 m_nmxm_nmx=GetSystemMetrics(SM_CXSCREENGetSystemMetrics(SM_CXSCREEN););m_nmym_nmy=GetSystemMetrics(SM_CYSCREENGetSystemMetrics(SM_CYSCREEN););CDC*CDC*pDCpDC=GetDCGetDC();();m_pmdcm_pmdc-CreateCompatibleDC(pDCCreateCompatibleDC(pDC););m_pbmpm_pbmp-CreateCompatibleBitmap(pDC,m_nmx,m_nmyCreateCompatibleBitmap(pDC,m_nmx,m_nmy););CBitmapCBitmap*pOldbitmappOldbitmap=m_pmdcm_pmdc-SelectObject(m_pbmpSelectObject(m_pbmp););CBrushCBrush brush;brush;brush.CreateStockObject(WHITE_BRUSHbrush.CreateStockObject(WHITE_BRUSH););CRectCRect rect(-1,-1,m_nmx,m_nmy);rect(-1,-1,m_nmx,m_nmy);m_pmdcm_pmdc-FillRect(rect,&brushFillRect(rect,&brush););m_pmdcm_pmdc-SelectObject(pOldbitmapSelectObject(pOldbitmap););ReleaseDC(pDCReleaseDC(pDC););return 0;return 0;10.7.3为工具栏按钮编写代码为工具栏按钮编写代码1 1 为为为为“颜色颜色颜色颜色”按钮的按钮的按钮的按钮的COMMANDCOMMAND消息添加响应消息添加响应消息添加响应消息添加响应函数函数函数函数2 编写程序代码编写程序代码void void CMyDrawView:OnColorCMyDrawView:OnColor()()CColorDialogCColorDialog dlgdlg;/;/构造颜色通用对话框类构造颜色通用对话框类构造颜色通用对话框类构造颜色通用对话框类CColorDialogCColorDialog的对象的对象的对象的对象dlgdlgdlg.m_cc.Flagsdlg.m_cc.Flags|=CC_PREVENTFULLOPEN|=CC_PREVENTFULLOPEN|CC_RGBINIT;CC_RGBINIT;dlg.m_cc.rgbResultdlg.m_cc.rgbResult=m_colorm_color;if(dlg.DoModalif(dlg.DoModal()=IDOK)()=IDOK)m_colorm_color=dlg.GetColordlg.GetColor();/();/将获取选定的颜将获取选定的颜将获取选定的颜将获取选定的颜色赋给当前画笔颜色变量色赋给当前画笔颜色变量色赋给当前画笔颜色变量色赋给当前画笔颜色变量 10.7.4 编写响应鼠标动作代码编写响应鼠标动作代码 WM_LBUTTONDOWNWM_LBUTTONDOWN(左键按下);(左键按下);(左键按下);(左键按下);WM_MOUSEMOVEWM_MOUSEMOVE(鼠标移动);(鼠标移动);(鼠标移动);(鼠标移动);WM_LBUTTONUPWM_LBUTTONUP(左键松开)。(左键松开)。(左键松开)。(左键松开)。使用鼠标画使用鼠标画使用鼠标画使用鼠标画图,需要处图,需要处图,需要处图,需要处理理理理3 3个鼠标动个鼠标动个鼠标动个鼠标动作作作作 10.7.5 修改修改OnDraw()函数函数 void void CMyDrawView:OnDraw(CDCCMyDrawView:OnDraw(CDC*pDCpDC)CMyDrawDocCMyDrawDoc*pDocpDoc=GetDocumentGetDocument();();ASSERT_VALID(pDocASSERT_VALID(pDoc););/TODO:add draw code for native data here/TODO:add draw code for native data here CBitmapCBitmap*poldbmppoldbmp=m_pmdcm_pmdc-SelectObject(m_pbmpSelectObject(m_pbmp););pDCpDC-BitBlt(0,0,m_nmx,m_nmy,m_pmdc,0,0,SRCCOPY);BitBlt(0,0,m_nmx,m_nmy,m_pmdc,0,0,SRCCOPY);m_pmdcm_pmdc-SelectObject(poldbmpSelectObject(poldbmp););10.8 为绘图程序添加菜单为绘图程序添加菜单 要使某一菜单项与工具栏上的按钮共享同要使某一菜单项与工具栏上的按钮共享同要使某一菜单项与工具栏上的按钮共享同要使某一菜单项与工具栏上的按钮共享同一消息响应函数,也就是完成同一操作,只要它一消息响应函数,也就是完成同一操作,只要它一消息响应函数,也就是完成同一操作,只要它一消息响应函数,也就是完成同一操作,只要它们的们的们的们的IDID标识符相同即可。所以,下面的工作是:标识符相同即可。所以,下面的工作是:标识符相同即可。所以,下面的工作是:标识符相同即可。所以,下面的工作是:编辑菜单资源,设置与工具栏上按钮相应的同一编辑菜单资源,设置与工具栏上按钮相应的同一编辑菜单资源,设置与工具栏上按钮相应的同一编辑菜单资源,设置与工具栏上按钮相应的同一IDID;添加键盘加速键;菜单项的状态更新。;添加键盘加速键;菜单项的状态更新。;添加键盘加速键;菜单项的状态更新。;添加键盘加速键;菜单项的状态更新。10.8.1 编辑菜单资源编辑菜单资源1打开菜单资源编辑器打开菜单资源编辑器 2增加菜单项增加菜单项 3增加菜单选项增加菜单选项10.8.2 添加键盘加速键添加键盘加速键1添加选择添加选择“直线直线”的快捷键的快捷键Ctrl+L 2给其余菜单项添加快捷键给其余菜单项添加快捷键10.8.3 菜单项的状态更新菜单项的状态更新 SetCheckSetCheck方式:该方式在菜单命令左边作方式:该方式在菜单命令左边作方式:该方式在菜单命令左边作方式:该方式在菜单命令左边作 复选标记(画复选标记(画复选标记(画复选标记(画)。)。)。)。EnabeleEnabele/Disable/Disable方式:该方式使菜单命令方式:该方式使菜单命令方式:该方式使菜单命令方式:该方式使菜单命令 禁止(呈灰色)或恢复。禁止(呈灰色)或恢复。禁止(呈灰色)或恢复。禁止(呈灰色)或恢复。菜单项的状态菜单项的状态菜单项的状态菜单项的状态更新控制的两更新控制的两更新控制的两更新控制的两种方式种方式种方式种方式 10.9 完善交互手段,添加快捷菜单完善交互手段,添加快捷菜单10.9.1 编辑快捷菜单资源编辑快捷菜单资源10.9.2 建立快捷菜单与建立快捷菜单与CMainFrame类类的关联的关联 10.9.3 显示快捷菜单显示快捷菜单 void void CMainFrame:OnContextMenu(CWndCMainFrame:OnContextMenu(CWnd*pWndpWnd,CPointCPoint point)point)CMenuCMenu menu;menu;if(menu.LoadMenu(IDR_POPUP_MENUif(menu.LoadMenu(IDR_POPUP_MENU)/加载快菜加载快菜加载快菜加载快菜单资源单资源单资源单资源 CMenuCMenu*pPopuppPopup=menu.GetSubMenu(0);=menu.GetSubMenu(0);pPopuppPopup-TrackPopupMenu(TPM_LEFTALIGNTrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,thisTPM_RIGHTBUTTON,point.x,point.y,this););10.10 相关知识相关知识10.10.1 Invalidate()函数函数Invalidate()Invalidate()函数是函数是函数是函数是CWndCWnd类的成员函数,使整类的成员函数,使整类的成员函数,使整类的成员函数,使整个客户区无效,引起窗口重画,调用视图类的个客户区无效,引起窗口重画,调用视图类的个客户区无效,引起窗口重画,调用视图类的个客户区无效,引起窗口重画,调用视图类的OnDrawOnDraw()函数。()函数。()函数。()函数。Invalidate()Invalidate()函数的调用函数的调用函数的调用函数的调用方式如下:方式如下:方式如下:方式如下:Invalidate(FALSEInvalidate(FALSE););10.10.2 CPoint类类1CPoint的构造函数的构造函数 2.CPoint类常用操作符类常用操作符10.10.3 CRect类类(1)CRect的构造函数的构造函数(2)CRect类常用成员函数类常用成员函数 10.10.4 CMenu类类CMenuCMenu类的成员函数类的成员函数类的成员函数类的成员函数LoadMenuLoadMenu、SetMenuSetMenu可完成加载和连接菜单资源可完成加载和连接菜单资源可完成加载和连接菜单资源可完成加载和连接菜单资源编辑器所创建的菜单资源到主窗口,编辑器所创建的菜单资源到主窗口,编辑器所创建的菜单资源到主窗口,编辑器所创建的菜单资源到主窗口,这样就可以实现应用程序运行中调这样就可以实现应用程序运行中调这样就可以实现应用程序运行中调这样就可以实现应用程序运行中调入所需的定制的菜单入所需的定制的菜单入所需的定制的菜单入所需的定制的菜单。课堂实训课堂实训1.编写图编写图10-5所示的字体显示程序所示的字体显示程序VC09.exe。2.完成完成MyDraw程序的位图显示功能。即在程序的位图显示功能。即在“位图位图”菜单下添加菜单下添加“位图显示位图显示”和和“显显示示BMP文件文件”菜单项,参考菜单项,参考10.5中的位图中的位图显示技术,实现位图显示功能。显示技术,实现位图显示功能。3.完成完成10.8.3节为其它菜单项创建节为其它菜单项创建“UPDATE_COMMAND_UI”消息响应函数并编消息响应函数并编写复选标记状态更新代码。写复选标记状态更新代码。

    注意事项

    本文(第10章 屏幕绘图.ppt)为本站会员(s****8)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开