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

    可视化编程技术(4).ppt

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

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

    可视化编程技术(4).ppt

    绘 图l设备文本lCPoint,CSize和CRectl绘图工具l绘图函数l文本处理l位图和位操作l图标和光标l编程范例0设备文本(Device Context)l是当是当windowswindows程序必须向一个设备演示输出时所需的存储信息程序必须向一个设备演示输出时所需的存储信息的结构。的结构。l设备文本提供了一张画布,人们可以在其上绘制点、直线、设备文本提供了一张画布,人们可以在其上绘制点、直线、曲线等一切可见的东西;曲线等一切可见的东西;l设备是指图形既可以在屏幕上显示,还可以在打印机、绘图设备是指图形既可以在屏幕上显示,还可以在打印机、绘图仪、虚拟现实的头盔上显示;仪、虚拟现实的头盔上显示;Windows应用程序经过设备描述表到设备驱动程序1 五个设备环境类CDC:MFC设备文本的基类,利用它可以访问整个显示设备CPaintDC:为窗口的OnPaint函数所使用的设备环境类CClientDC:窗口客户区(不包括边框、标题栏和菜单栏)CWindowsDC:整个应用程序窗口的设备环境CMetaFileDC:表示Windows图元文件的设备环境类做一个画线的程序,演示各个类的作用。CDC*pDC=GetDC();pDC-MoveTo(m_ptOrigin);pDC-LineTo(point);ReleaseDC(pDC);CClientDC dc(this);/CClientDC dc(GetParent();dc.MoveTo(m_ptOrigin);dc.LineTo(point);CWindowDC dc(this);/CWindowDC dc(GetParent();CWindowDC dc(GetDesktopWindow();dc.MoveTo(m_ptOrigin);dc.LineTo(point);*/2绘图使用方法在堆栈中构造对象:CClientDC myDC(this);myDC.Ellipse();通过CWnd的GetDC获得设备环境的指针,此时注意要调用ReleaseDC进行释放CDC*pDC=GetDC();pDC-Ellipse();ReleaseDC(pDC);Windows限制了可用设备环境的数目,如果设备环境没有被成功地删除,程序在退出之前有一小部分内存就会丢失3CPoint,CSize和CRect1、CPoint 封装了标准结构POINT;POINT p;p.x=10;p.y=10;pDC-TextOut(p.x,p.y,POINT为一个结构为一个结构,成员只有成员只有x,y);CPoint q,q1(10,10),q2(0,100);q=q1+q2;pDC-TextOut(q.x,q.y,CPoint为一个类为一个类,封装了封装了POINT这个结构这个结构,成成员有员有x,y,Offset,+,.);2、CSize 封装了标准结构SIZE;SIZE的成员只有cx,cy,用来定义一个矩形区域的大小(自己练习);3、CRect 封装了标准结构RECT;RECT的成员只有left,top,right,bottom,用来定义矩形区域(自己练习);4绘图工具lWindows在设备文本中提供了许多绘图工具,如:CPen,CBrush,CFont和CPalette等,它们的基类是CGdiObject。l默认的画笔是黑色的,宽度是一个像素,默认的画刷是白色的。l颜色由RGB值来指定。(1)RGB(red,green,blue)(2)0 x 00 FF FF FF B G R5选择库存对象(画笔、画刷)1、选择库存对象(StockObject)函数原型(见MSDN):virtual CGdiObject*SelectStockObject(int nIndex);2、例子:在void CTestView:OnDraw中加入代码:pDC-SelectStockObject(LTGRAY_BRUSH);/(1)画圆pDC-Ellipse(50,50,150,150);pDC-SelectStockObject(BLACK_PEN);/(2)画线pDC-MoveTo(10,100);pDC-LineTo(550,100);pDC-SelectStockObject(DKGRAY_BRUSH);/(3)椭圆pDC-Ellipse(200,50,350,150);pDC-SelectStockObject(NULL_BRUSH);/(4)矩形pDC-Rectangle(400,50,500,150);6自定义画笔-11、一步构造法:CPen NewPen(PS_SOLID,5,RGB(0,0,255);画笔风格是实线,画笔宽度是5,颜色为蓝色;2、二步构造法CPen NewPen;NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255);7自定义画笔-23、将画笔选入设备文本对象将画笔选入设备文本对象CPen NewPen;/声明画笔对象声明画笔对象CPen*pOldPen;/保存原先画笔指针保存原先画笔指针NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255);pOldPen=pDC-SelectObject(&NewPen);/将画笔选入设备文本对象将画笔选入设备文本对象pDC-Ellipse(150,100,300,200);pDC-MoveTo(100,200);pDC-LineTo(350,200);pDC-SelectObject(pOldPen);/恢复原先的画笔对象恢复原先的画笔对象8自定义的画刷1、画刷决定填充区域的颜色和风格(1)实心(solid)风格 CreateSolidBrush(COLORREF crColor)(2)网格(hatched)风格CreateHatchBrush(int nIndex,COLORREF crColor)(3)模式(patterned)风格,根据用户定义的位图来绘制 CreatePatternBrush(Cbitmap*pBitmap)2、一旦初始化完画刷,可调用CDC的SelectObject将画刷选入设备文本对象9自定义的画刷举例/自定义画刷CBrush NewBrush;CBrush*pOldBrush;NewBrush.CreateHatchBrush(HS_CROSS,RGB(0,0,255);pOldBrush=pDC-SelectObject(&NewBrush);pDC-Rectangle(100,100,200,200);pDC-SelectObject(pOldBrush);10绘图函数l绘图函数用到的坐标都是按逻辑单位给出绘图函数用到的坐标都是按逻辑单位给出的,默认时,左上角位于坐标的,默认时,左上角位于坐标(0,0)处,逻处,逻辑单位为像素。辑单位为像素。l绘图函数见绘图函数见p.133设置像素、设置当前位置、画简单线、画弧、设置像素、设置当前位置、画简单线、画弧、画矩形、画椭圆和圆、画饼图、画多边形画矩形、画椭圆和圆、画饼图、画多边形.11绘图函数-11、设置像素(SetPixel)、设置当前位置(MoveTo)、画线(LineTo)、画矩形(Rectangle)、画椭圆(圆)2、画弧/pDC-Rectangle(100,100,300,200);/边界矩形/pDC-MoveTo(200,150);pDC-LineTo(300,175);/起点/pDC-MoveTo(200,150);pDC-LineTo(125,100);/终点pDC-Arc(100,100,300,200,300,175,125,100);3、圆角矩形pDC-RoundRect(100,100,300,200,100,50);pDC-Ellipse(100,100,200,150);12绘图函数-24、画饼图/pDC-Rectangle(100,100,300,200);/边界矩形pDC-Pie(100,100,300,200,300,100,100,100);5、画多边形POINT point4;point0.x=100;point0.y=100;point1.x=200;point1.y=200;point2.x=200;point2.y=100;point3.x=100;point3.y=200;pDC-Polygon(point,4);136、填充一个区域 FloodFillpDC-Rectangle(100,100,200,200);CBrush NewBrush;CBrush*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255);pOldBrush=pDC-SelectObject(&NewBrush);pDC-FloodFill(150,150,RGB(0,0,0);pDC-SelectObject(pOldBrush);自己练习 710,参见书P136绘图函数-314绘图函数-47、用点线画一个矩形边框,在CTestView:OnLButtonDown中加入代码:CDC*pDC=GetDC();pDC-DrawFocusRect(new CRect(100,100,200,200);8、用指定画刷填充一个矩形区域,但不画边线 FillRectCBrush NewBrush;CBrush*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255);pOldBrush=pDC-SelectObject(&NewBrush);pDC-FillRect(new CRect(100,100,200,200),&NewBrush);pDC-SelectObject(pOldBrush);159、用指定画刷画一个矩形,内部不填充 FrameRect CBrush NewBrush;CBrush*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255);pOldBrush=pDC-SelectObject(&NewBrush);pDC-FrameRect(new CRect(100,100,200,200),&NewBrush);pDC-SelectObject(pOldBrush);绘图函数-516绘图函数-610、在给定矩形内反显现有颜色 InvertRectCPen NewPen;/声明画笔对象CPen*pOldPen;/保存原先画笔指针NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255);pOldPen=pDC-SelectObject(&NewPen);/将画笔选入设备文本对象pDC-MoveTo(100,100);pDC-LineTo(200,200);pDC-SelectObject(pOldPen);/恢复原先的画笔对象pDC-InvertRect(new CRect(100,100,200,200);17绘图模式1、绘图模式指定如何将画笔颜色和被填充对象的内部颜色与显示设备上的颜色相结合;2、改变绘图模式 int SetROP2(int nDrawMode)3、绘图模式(P140)(1)R2_COPYPEN,默认绘图模式,复制;(2)R2_NOT,当前显示颜色的反色;(3)R2_XORPEN,显示颜色与画笔颜色进行异或运算;18绘图模式(R2_NOT)-11、当前显示颜色的反色:蓝色(0 x000000FF)的反色为黄色(0 x00FFFF00)白色(0 x00FFFFFF)的反色为黑色(0 x00000000)2、例子:(1)在CTestView:OnDraw中加入代码:CBrush NewBrush,*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255);pOldBrush=pDC-SelectObject(&NewBrush);pDC-Rectangle(100,10,300,100);pDC-SelectObject(pOldBrush);19绘图模式(R2_NOT)-2(2)在CTestView:OnLButtonDown中加入代码:CDC*pDC=GetDC();CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,3,RGB(0,0,255);/与这里RGB设的颜色无关pOldPen=pDC-SelectObject(&NewPen);pDC-SetROP2(R2_NOT);pDC-MoveTo(50,50);pDC-LineTo(350,50);pDC-SelectObject(pOldPen);20绘图模式(R2_XORPEN)-11、显示颜色与画笔颜色进行异或运算:0 x000000FF 0 x000000FF=0 x000000000 x00FFFFFF 0 x000000FF=0 x00FFFF002、例子:(1)在CTestView:OnDraw中加入代码:CBrush NewBrush,*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255);pOldBrush=pDC-SelectObject(&NewBrush);pDC-Rectangle(100,10,300,100);pDC-SelectObject(pOldBrush);21绘图模式(R2_XORPEN)-2(2)在CTestView:OnLButtonDown中加入代码:CDC*pDC=GetDC();CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,3,RGB(0,0,255);pOldPen=pDC-SelectObject(&NewPen);pDC-SetROP2(R2_XORPEN);pDC-MoveTo(50,50);pDC-LineTo(350,50);pDC-SelectObject(pOldPen);22绘图模式(背景颜色)-1(1)设置背景颜色:默认时,在绘制图形或输出文本时,背景颜色是白色背景。可使用CDC的成员函数SetBKColor来设置新的背景颜色。函数原型为:Virtual COLORREF SetBkColor(COLORREF cr);例如:SetBkColor(RGB(0,255,0);23绘图模式(背景颜色)-2(2)设置背景模式:设置完当前背景颜色后,若使其在输出时有效,还需要使用CDC的成员函数SetBKMode来控制显示在屏幕上时的背景颜色。函数原型为:Int SetBkMode(int nBkmode);参数的值可以是OPAQUE或TRANSPARENT。若为前者,则显示时背景都改变为当前颜色,为默认值。24CRgn与区域(P132)l设置区域可以保证绘图时不超过给定的范围,不覆盖已存在的信息lMFC提供CRgn封装了区域,其成员函数有:CreateRectRgn,CreateEllipseRgn,CreatePolygonRgn,CreatePolyPolygonCombineRgn可将新的区域合并起来lCDC的FillClipRgn或PaintRgn可填充区域lCDC的SelectClipRgn可设置剪裁区域l用SelectObject将裁剪区域选入设备文本中,可以防止在裁剪区域以外绘制。25CRgn举例在void CTestView:OnDraw中加入代码:/用点线画矩形边框(画出rgn大小)pDC-DrawFocusRect(new CRect(10,10,200,200);/CRgn rgn;/rgn.CreateRectRgn(10,10,200,200);/pDC-SelectObject(rgn);pDC-MoveTo(0,50);pDC-LineTo(300,50);pDC-MoveTo(50,0);pDC-LineTo(50,300);26映射模式-1(P137)1、在视图窗口绘制图形时,给定的坐标称为逻辑坐标,视图窗口内对象的实际坐标称为设备坐标。所有绘图函数的坐标都是逻辑坐标,但鼠标消息处理函数的坐标是设备坐标。2、映射模式用于定义逻辑坐标的单位与设备单位坐标间的关系(p.137)(1)约束映射模式是指比例因子固定(p.138)(2)非约束映射模式是用矩形区域推导出比例因子及轴向27映射模式-23、设置映射模式调用CDC的SetMapModel逻辑坐标与设备坐标的转换 DPtoLP,LPtoDP4、默认的映射模式为MM_TEXT,把每个逻辑单位映射成一个设备像素,X轴向右,Y轴向下。28举例1(映射模式)/MM_TEXT:默认映射模式;MM_HIENGLISH:每个逻辑单位映射成0.001英寸,X轴正方向向右,Y轴正方向向上pDC-SetMapMode(MM_TEXT);/MM_HIENGLISH CRect rect;GetClientRect(&rect);int nOX=rect.right/2,nOY=rect.bottom/2;pDC-SetViewportOrg(nOX,nOY);/设置视口原点pDC-MoveTo(-20,0);pDC-LineTo(100,0);/坐标轴 XpDC-MoveTo(0,-20);pDC-LineTo(0,100);/坐标轴 YCPoint O(100,100);int r=50;/圆心、半径pDC-Ellipse(O.x-r,O.y-r,O.x+r,O.y+r);29举例2(设备坐标和逻辑坐标)1、新建Project,在最后一步将CTestView的基类改为CScrollView2、void CTestView:OnInitialUpdate()修改代码sizeTotal.cx=640;sizeTotal.cy=480;3、void CCCView:OnLButtonDown中加入代码:POINT dp,lp;/设备坐标和逻辑坐标dp=point;lp=point;CClientDC dc(this);OnPrepareDC(&dc);/根据当前滚动位置设置窗口原点dc.DPtoLP(&lp);/设备坐标逻辑坐标CString str;str.Format(单击鼠标左键DP(%d,%d),LP(%d,%d),dp.x,dp.y,lp.x,lp.y);dc.TextOut(lp.x,lp.y,str);拖动滚动条,单击鼠标左键,看一看结果.30文本处理l文本输出函数(P141)1、TextOut 在指定位置输出文本2、DrawText在指定的矩形区域中显示格式化文本3、ExtTextOut 用当前选择字体在指定矩形区域中显示格式化文本4、TabbedTextOut 在指定位置显示字符串,并按指定的制表间距扩展制表符31设置文本属性lCDC提供以下成员函数设置文本属性SetMapMode 设置映射模式SetBkMode 设置背景模式SetBkColor 设置背景颜色SetTextColor 设置文本颜色SetTextAlign 设置文本对齐标记(P143)SetTextCharacterExtra 设置字符间间隔值32设置文本属性例子-1/SetMapMode 设置映射模式pDC-SetMapMode(MM_TEXT);/SetBkMode 设置背景模式(OPAQUE不透明(默认),TRANSPARENT 透明)pDC-SetBkMode(OPAQUE);/SetBkColor 设置背景颜色pDC-SetBkColor(RGB(100,255,255);/SetTextColor 设置文本颜色pDC-SetTextColor(RGB(0,0,255);33设置文本属性例子-2/SetTextAlign 设置文本对齐标记(P143)pDC-SetTextAlign(TA_CENTER|TA_BOTTOM);/SetTextCharacterExtra 设置字符间间隔值pDC-SetTextCharacterExtra(10);pDC-TextOut(100,50,设置文本属性);/这两条直线的交点为(100,50)pDC-MoveTo(0,50);pDC-LineTo(200,50);pDC-MoveTo(100,0);pDC-LineTo(100,100);34获取字符属性-11、字符属性:字符大小,字符的行距等2、当前字体的完整描述(书P144)typedef struct tagTEXTMETRIC LONG tmHeight;/字符高度 LONG tmExternalLeading;/行间距 TEXTMETRIC,FAR*LPTEXTMETRIC;ghtmAscenttmDescentbase line35获取字符属性-23、例子:在CTestView:OnDraw中加入代码:TEXTMETRIC tm;pDC-GetTextMetrics(&tm);CString str;str.Format(字符高度(tmHeight)=%d,行间距(tmExternalLeading)=%d,tm.tmHeight,tm.tmExternalLeading);pDC-TextOut(100,50,str);36计算字符串的宽度1、计算字符串宽度 CSize GetTextExtent(const CString&str);2、在CTestView:OnDraw中加入代码:CString str;CSize sz=pDC-GetTextExtent(字);str.Format(“字”的宽度=%d,高度=%d,sz.cx,sz.cy);pDC-TextOut(100,20,str);sz=pDC-GetTextExtent(a);str.Format(“a”的宽度=%d,高度=%d,sz.cx,sz.cy);pDC-TextOut(100,80,str);sz=pDC-GetTextExtent(m);str.Format(“m”的宽度=%d,高度=%d,sz.cx,sz.cy);pDC-TextOut(100,110,str);sz=pDC-GetTextExtent(am);str.Format(“am”的宽度=%d,高度=%d,sz.cx,sz.cy);pDC-TextOut(100,140,str);37使用字体(库存字体)使用库存字体SelectStockObject(p.145)pDC-TextOut(100,20,默认字体);pDC-SelectStockObject(ANSI_FIXED_FONT);pDC-TextOut(100,50,ANSI_FIXED_FONT字体);pDC-SelectStockObject(SYSTEM_FONT);pDC-TextOut(100,80,SYSTEM_FONT字体);38使用字体(自定义字体P145)LOGFONT lf;lf.lfHeight=30;/高度30 lf.lfWidth =0;/默认宽度lf.lfEscapement=150;/逆时针旋转15度lf.lfWeight=FW_BOLD;/粗体lf.lfUnderline=false;/无下划线lf.lfItalic=false;/非斜体lf.lfStrikeOut=false;/无删除线lf.lfCharSet=GB2312_CHARSET;strcpy(lf.lfFaceName,仿宋_GB2312);CFont NewFont,*pOldFont;NewFont.CreateFontIndirect(&lf);pOldFont=pDC-SelectObject(&NewFont);pDC-TextOut(100,100,例子Example);pDC-SelectObject(pOldFont);这两种方法等价:1、创建自定义字体方法一(1)LOGFONT结构中定义逻辑字体;(2)使用CreateFontIndrect函数;2、创建自定义字体方法二CreateFont()见右边的例子39位图和位操作1、BMP文件:(BMP深度:1,4,8,16,24,32)图像:在 24 位格式中,图像中的每个象素都由存储为 BRG 的三字节 RGB 序列表示。2、位图用位模式来形成图像,MFC提供CBitmap类管理位图3、装载预定义位图使用LoadOEMBitmap4、位图可以从资源中装载LoadBitmap,见“loadbitmap用法”文档5、CDC提供有三个成员函数用于传送图形数据块:PatBlt,BitBlt,StetchBlt,可用来在设备文本对象中传送数据或从一个设备文本对象传送数据到另一个设备文本对象。用GetDeviceCaps()用来判断设备是否支持位图操作函数。40使用绘图函数建立位图1、调用CreateCompatibleBitmap(CDC*pDC,int nWidth,int nHeight)成员函数创建空白位图,其宽度和高度单位是象素 调用该函数时,Windows为位图保留一块内存空间。2、空白位图创建后,调用成员函数CreateCompatibleDC(CDC*pDC)来建立与位图相应的内存设备文本对象。若pDC为NULL,则创建与系统显示器兼容的内存设备文本对象。3、调用成员函数SelectObject将位图选入内存设备文本对象4、使用绘图函数在位图内绘制位图41位图举例-11、PatBlt是使用当前选择的画刷来填充一个矩形(MSDN)。例子:(1)将MyBitmap.bmp载入ResourceView 改名为IDB_MYBITMAP(2)在CTestView:OnDraw中加入代码:CBitmap bm;bm.LoadBitmap(IDB_MYBITMAP);/从资源中Load BMPCBrush*pOldBrush,NewBrush;NewBrush.CreatePatternBrush(&bm);/创建画刷pOldBrush=pDC-SelectObject(&NewBrush);RECT rect;GetClientRect(&rect);pDC-PatBlt(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,PATCOPY);/画刷被复制到填充区域pDC-SelectObject(pOldBrush);bm.DeleteObject();422、BitBlt将图形数据块从一个位置传送到另一个位置,源和目标可以是同一设备文本对象,也可以是不同的设备文本对象(MSDN)CDC MemDC;/定义内存设备文本对象CBitmap bm;/定义CBitmap对象bm.LoadBitmap(IDB_MYBITMAP);/装载位图资源MemDC.CreateCompatibleDC(pDC);/创建内存设备文本对象MemDC.SelectObject(&bm);/将位图选入内存设备文本对象BITMAP tmp;bm.GetBitmap(&tmp);/获得位图参数pDC-BitBlt(20,20,tmp.bmWidth,tmp.bmHeight,&MemDC,0,0,SRCCOPY);bm.DeleteObject();位图举例-243位图举例-3/用下面这条语句替换上面红色语句,看看变化:/pDC-BitBlt(20,20,tmp.bmWidth,tmp.bmHeight,&MemDC,50,50,SRCCOPY);3、StretchBlt可以执行所有用BitBlt可以执行的操作,还可改变图形数据块的大小(用下面这条语句替换上面红色语句)pDC-StretchBlt(20,20,2*tmp.bmWidth,2*tmp.bmHeight,&MemDC,0,0,tmp.bmWidth,tmp.bmHeight,SRCCOPY);444、如果想直接从文件装载BMP图片将这条语句bm.LoadBitmap(IDB_MYBITMAP);用下面三条语句替代即可:HBITMAP hBitmap;hBitmap=(HBITMAP)LoadImage(NULL,MyBitmap.bmp,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);bm.Attach(hBitmap);注意:文件名使用相对路径,如.MyBitmap.bmp45图标1、图标是一种特殊形式的位图,与位图不同的是,、图标是一种特殊形式的位图,与位图不同的是,图标具有固定的大小图标具有固定的大小2、CWinApp的的LoadStandardIcon函数用于装载函数用于装载Windows系统预定义的图标系统预定义的图标P1523、如果使用图形编辑器创建的图标资源,必须调、如果使用图形编辑器创建的图标资源,必须调用用CWinApp的的LoadIcon来装载来装载461.将将IDI_WINFACE.ICO载入载入ResourceView 改名为改名为IDI_WINFACE2.在在CTestView:OnDraw中加入代码:中加入代码:HICON hIcon;RECT rect;GetClientRect(&rect);hIcon=AfxGetApp()-LoadIcon(IDI_WINFACE);int x,y;x=(rect.right -GetSystemMetrics(SM_CXICON)/2;y=(rect.bottom-GetSystemMetrics(SM_CYICON)/2;pDC-DrawIcon(x,y,hIcon);3.将上面程序中的红色语句替换为下面语句,看看结果:将上面程序中的红色语句替换为下面语句,看看结果:hIcon=AfxGetApp()-LoadStandardIcon(IDI_QUESTION);图标举例47光标1、光标用于表示进行鼠标操作时鼠标的位置和形状、光标用于表示进行鼠标操作时鼠标的位置和形状2、CWinApp的的LoadStandardCursor函数用于装函数用于装载载Windows系统预定义的光标系统预定义的光标P1543、如果使用图形编辑器创建的光标资源,必须调用、如果使用图形编辑器创建的光标资源,必须调用CWinApp的的LoadCursor来装载来装载4、Windows的的API函数函数SetCursor可以设置光标形可以设置光标形状状481、在CTestView:OnLButtonDown中加入代码:SetCapture();/捕获鼠标HCURSOR hCursor;/存放鼠标光标句柄hCursor=AfxGetApp()-LoadStandardCursor(IDC_CROSS);SetCursor(hCursor);/设置自定义光标(这里为十字形)RECT rect;GetClientRect(&rect);/获取视图窗口客户区坐标ClientToScreen(&rect);/转换客户区坐标为屏幕坐标ClipCursor(&rect);/将光标限定在视图窗口客户区内光标举例-1492、在CTestView:OnLButtonUp中加入代码:ReleaseCapture();/释放鼠标捕获并恢复正常输入释放鼠标捕获并恢复正常输入ClipCursor(NULL);/使光标可以移到屏幕任意位置使光标可以移到屏幕任意位置HCURSOR hCursor;/存放鼠标光标句柄存放鼠标光标句柄hCursor=AfxGetApp()-LoadStandardCursor(IDC_ARROW);SetCursor(hCursor);/恢复默认光标恢复默认光标3、自定义光标(1)自定义光标资源,命名为 IDC_MYCURSOR(2)将上一页中的红色语句改为:hCursor=AfxGetApp()-LoadCursor(IDC_MYCURSOR);光标举例-2501、Windows系统的设备无关特性使得通过设备文本传给ondraw成员函数而实现的绘制调用,同样可用于在屏幕和打印机等设备上进行绘制。2、文档打印时,ondraw接收到的设备文本不是CPaintDC对象,而是与当前打印机相关的CDC对象。3、OnDraw通过设备文本进行相同的调用,就像在屏幕中显示文档一样4、当用AppWizard创建应用程序的框架时,已经具备了简单的打印功能,见view类打印(P155)511、开始逐页打印之前,OnFilePrint将调用CDC:StartDoc,对于待打印的每一页,在开始打印之前,OnFilePrint要调用CView:OnPrepareDC,CDC:StartPage,CView:OnPrint和CDC:EndPage。2、OnPrepareDC用于初始化每页的设备文本,例如创建映射模式、创建字体等。3、StartPage开始打印新的一页,并通知设备驱动程序新数据已到,EndPage结束一页的打印。4、OnPrint负责每一页的打印工作,其实现代码一般不用编写5、OnEndPrinting用于释放在OnBeginPrinting中申请的资源注:打印预览与打印进行的工作类似。打印循环52编程范例53处理视图l在视图类中添加成员变量protected:int m_Draw;HCURSOR m_hCursor;CPoint m_pOld;CPoint m_pOrigin;l初始化成员变量 m_Draw=0;m_hCursor=AfxGetApp()-LoadStandardCursor(IDC_CROSS);54l添加处理鼠标左钮按下的消息m_pOld=point;m_pOrigin=point;SetCapture();m_Draw=1;RECT rect;GetClientRect(&rect);ClientToScreen(&rect);ClipCursor(&rect);55l添加处理鼠标移动的消息SetCursor(m_hCursor);if(m_Draw)CClientDC dc(this);dc.SetROP2(R2_NOT);dc.MoveTo(m_pOrigin);dc.LineTo(m_pOld);dc.MoveTo(m_pOrigin);dc.LineTo(point);m_pOld=point;56l添加处理鼠标左钮抬起的消息if(m_Draw)m_Draw=0;ReleaseCapture();ClipCursor(NULL);l定制视图窗口PreCreateWindowcs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,(HBRUSH):GetStockObject(WHITE_BRUSH),0);l修改窗口标题(P161)57处理文档l创建存放直线坐标的类class CMyLine:public CObjectprotected:int m_StartX;int m_StartY;int m_EndX;int m_EndY;public:CMyLine(int StartX,int StartY,int EndX,int EndY);void DrawLine(CDC*pDC);58CMyLine:CMyLine(int StartX,int StartY,int EndX,int EndY)m_StartX=StartX;m_StartY=StartY;m_EndX=EndX;m_EndY=EndY;void CMyLine:DrawLine(CDC*pDC)pDC-MoveTo(m_StartX,m_StartY);pDC-LineTo(m_EndX,m_EndY);59l在文档类中添加处理直线集合的数据成员和成员函数protected:CObArray m_ObArray;public:void AddLine(int Startx,int StartY,int EndX,int EndY);CMyLine*GetLine

    注意事项

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

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




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

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

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

    收起
    展开