大学VisualC案例教程.ppt

上传人:sccc 文档编号:4938346 上传时间:2023-05-24 格式:PPT 页数:36 大小:1.54MB
返回 下载 相关 举报
大学VisualC案例教程.ppt_第1页
第1页 / 共36页
大学VisualC案例教程.ppt_第2页
第2页 / 共36页
大学VisualC案例教程.ppt_第3页
第3页 / 共36页
大学VisualC案例教程.ppt_第4页
第4页 / 共36页
大学VisualC案例教程.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《大学VisualC案例教程.ppt》由会员分享,可在线阅读,更多相关《大学VisualC案例教程.ppt(36页珍藏版)》请在三一办公上搜索。

1、大学Visual C+案例教程,第三讲 图形设备接口和资源编程西安交通大学计算机教学实验中心http:/,教学目标,Windows的图形设备接口 MFC的设备环境类和图形对象,授课内容,3.1 设备环境类和图形对象 3.2 库存图形对象 3.3 画笔与画刷 3.4 字体3.5 绘图模式3.6 GDI坐标系3.7 WINDOWS应用程序资源3.8 位图3.9 菜单3.10 图标、快捷键和字符串表 3.11工具条与状态条 3.12更新命令用户接口消息,3.1 设备环境类和图形对象,设备环境 图形设备接口,设备环境,在Windows程序中,应用程序的输出并不直接面向物理的设备,如显示屏或打印机,而是

2、针对一个称之为设备环境(Device Context)的逻辑设备进行操作,设备环境与实际设备之间的信息传送由Windows直接管理。,设备环境类,CDC类 CPaintDCCClientDCCWindowDCCMetaFileDC,图形对象类,CGdiObject类CPenCBrushCFontCBitmapCPaletteCRgn,3.2 库存图形对象,virtual CGdiObject*SelectStockObject(int nIndex);nIndex指定要创建的图形对象图形对象说明BLACK_PEN黑笔NULL_PEN空笔,不画线或边框WHITE_PEN白笔BLACK_BRUSH

3、黑色刷子WHITE_BRUSH白色刷子DKGRAY_BRUSH暗灰刷子GRAY_BRUSH灰色刷子LTGRAY_BRUSH淡灰色刷子NULL_BRUSH空刷子,内部不填充ANSI_FIXED_FONTWindows固定倾角(单间隔)系统字体ANSI_VAR_FONTWindows可变倾角(比例间隔)系统字体DEFAULT_GUI_FONT缺省GUI字体(如菜单和对话框字体)SYSTEM_FONT系统字体 不必存储和恢复原来的图形对象,【例】用鼠标切换椭圆的图形参数,修改文档类的定义(头文件),加入二个变量定义:class CMyDoc:public CDocumentprotected:/cr

4、eate from serialization onlyCMyDoc();DECLARE_DYNCREATE(CMyDoc)/Attributespublic:int m_nColor;CRect m_rectEllipse;/Operationspublic:(以下省略文档类的其它定义语句),【例】用鼠标切换椭圆的图形参数(续1),修改文档类的OnNewDocument函数,对变量进行初始化:BOOL CMyDoc:OnNewDocument()if(!CDocument:OnNewDocument()return FALSE;/TODO:add reinitialization code

5、here/(SDI documents will reuse this document)m_rectEllipse=CRect(100,100,300,250);m_nColor=0;return TRUE;,【例】用鼠标切换椭圆的图形参数(续2),修改视图类的OnDraw函数,加入显示椭圆代码:void CMyView:OnDraw(CDC*pDC)CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereswitch(pDoc-m_nColor)/根据颜色变量值决定用不同的画刷

6、case 0:pDC-SelectStockObject(GRAY_BRUSH);break;case 1:pDC-SelectStockObject(LTGRAY_BRUSH);break;case 2:pDC-SelectStockObject(BLACK_BRUSH);break;pDC-Ellipse(pDoc-m_rectEllipse);/画椭圆,【例】用鼠标切换椭圆的图形参数(续3),用ClassWizard建立鼠标左键的消息处理函数,并加入代码void CMyView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your m

7、essage handler code here and/or call defaultCMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(pDoc-m_rectEllipse.PtInRect(point)/判断鼠标是否点在椭圆内 pDoc-m_nColor=(pDoc-m_nColor+1)%3;/修改颜色变量值 InvalidateRect(pDoc-m_rectEllipse);CView:OnLButtonDown(nFlags,point);,3.3 画笔与画刷,画笔是用来画线的工具,是CPen类的对象成员函数CreatePen()用于创

8、建画笔,其原型为:BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor);第1个参数是画笔样式,可取:画笔样式说明PS_SOLID创建实线笔PS_DASH创建由短线构成的虚线PS_DOT创建由点构成的虚线PS_DASHDOT创建由短线和点构成的虚线PS_DASHDOTDOT创建由短线、点、点构成的虚线PS_NULL创建空(空白)画笔,CBrush类,画刷是用来填充图形的工具,是CBrush类的对象创建画刷的成员函数的原型为:BOOL CreateSolidBrush(COLORREF crColor);BOOL CreateHatch

9、Brush(int nIndex,COLORREF crColor);其中参数nIndex指定了阴影风格,可取值为:阴影风格说明HS_BDIAGONAL从左下角到右上角的45度斜线HS_CROSS水平线与垂直线HS_DIAGCROSS相互垂直的45度线HS_FDIAGONAL从左上角到右下角的45度斜线HS_HORIZONTAL水平线HS_VERTICAL垂直线,图形对象的使用,创建新的GDI对象CreatePen();CreateSolidBrush();CreateHatchBrush();将GDI对象选入到DC中,保存原有GDI对象指针pOld=pDC-SelectObject();绘图

10、恢复原有GDI对象 pDC-SelectObject(pOld);,CDC:SelectObject()函数原型,CPen*SelectObject(CPen*pPen);CBrush*SelectObject(CBrush*pBrush);virtual CFont*SelectObject(CFont*pFont);,【例】用鼠标切换椭圆的图形参数(续),void CMyView:OnDraw(CDC*pDC)CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereCBrush

11、 brushNew,*pbrushOld;CPen penNew,*ppenOld;switch(pDoc-m_nColor)/根据颜色变量值决定创建不同的画刷和画笔case 0:brushNew.CreateSolidBrush(RGB(255,0,0);penNew.CreatePen(PS_DASH,1,RGB(0,0,0);break;case 1:brushNew.CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0);penNew.CreatePen(PS_SOLID,1,RGB(255,0,0);break;case 2:brushNew.Creat

12、eSolidBrush(RGB(0,0,255);penNew.CreatePen(PS_SOLID,3,RGB(0,255,0);break;pbrushOld=pDC-SelectObject(/恢复原来的画笔,3.4 字体,描述输出文字的字体可用CFont对象。CFont对象的使用方法与画笔、画刷类似BOOL CreateFont(int nHeight,/字符逻辑高度int nWidth,/字体逻辑宽度int nEscapement,/出口矢量与X轴的角度int nOrientation,/字符基线与X轴的角度int nWeight,/字体磅值BYTE bItalic,/非0则为斜体B

13、YTE bUnderline,/非0则加下划线BYTE cStrikeOut,/非0则加删除线BYTE nCharSet,/此字体的字符集BYTE nOutPrecision,/输出精度BYTE nClipPrecision,/裁剪精度BYTE nQuality,/输出质量BYTE nPitchAndFamily,/调距和字体族LPCTSTR lpszFacename);/字体的字型名,3.5 绘图模式,绘图模式由CDC的成员函数SetROP2()设定,其原型为:int SetROP2(int nDrawMode);其中R2_NOT模式可保证所绘图形是可见的,即如果画笔色与背景色相同,则以与背

14、景色相反的颜色作图。,3.6 GDI坐标系,GDI支持两种类型的坐标系:逻辑坐标系:按坐标设置方式(又称为映射模式)可分为8种 最常用(也是缺省设置)的映射模式是MM_TEXT 设备坐标系 客户区坐标系统屏幕坐标系统窗口坐标系统。,3.7 Windows应用程序资源,资源:是一种数据,它包含了决定程序的用户界面的文本和图形。资源所决定的界面元素有:菜单加速键位图、光标、图标对话框、控件字符串工具栏,资源脚本文件和资源头文件,资源文件.rc定义资源内容资源通过资源标识符加以区别资源头文件Resource.h定义一个项目中所有的资源标识符,3.8 位图,向项目中添加资源:Developer Stu

15、dio的Insert/Resource菜单选项载入位图资源:使用 CBitmap类的成员函数BOOL LoadBitmap(LPCTSTR lpszResourceName);BOOL LoadBitmap(UINT nIDResource);建立一合适的内存设备环境并将位图选入该设备环境:CDC MemDC;MemDC.CreateCompatibleDC(NULL);MemDC.SelectObject(从内存设备环境中将位图复制到指定设备:使用 CDC:BitBlt使用 CDC:StretchBlt,【例】显示一张位图文件(.BMP),修改视图类的定义(头文件),加入3个变量定义:/My

16、View.h:interface of the CMyView classclass CMyView:public CView/定义CBitmap类对象以及位图的高度和宽度变量CBitmap m_Bitmap;int m_nHeight;int m_nWidth;protected:/create from serialization onlyCMyView();DECLARE_DYNCREATE(CMyView)(以下省略其它定义语句);,【例】显示一张位图文件(.BMP)(续1),修改视图类的构造函数:/CMyView construction/destructionCMyView:CMy

17、View()/TODO:add construction code here/载入位图资源,读位图信息m_Bitmap.LoadBitmap(IDB_BITMAP1);BITMAP BM;m_Bitmap.GetBitmap(,例12-3 显示一张位图文件(.BMP)(续2),修改视图类的OnDraw函数,显示位图:void CMyView:OnDraw(CDC*pDC)CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data here/显示位图CDC MemDC;MemDC.CreateC

18、ompatibleDC(NULL);MemDC.SelectObject(,CDC:BitBlt,BOOL BitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORD dwRop);x,y用于指定目标矩形区域的左上角坐标nWidth,nHeight为目标区域的宽度和高度pSrcDC是指向源设备对象的指针xSrc,ySrc源位图的左上角坐标dwRop决定了位图的显示方式,CDC:StretchBlt,实现图像缩放输出 BOOL StretchBlt(int x,int y,int nWidth,int

19、nHeight,CDC*pSrcDC,int xSrc,int ySrc,int nSrcWidth,int nSrcHeight,DWORD dwRop);,3.9 菜单,编辑菜单资源:使用菜单编辑器(注意ID)Separator表示分隔线Popup选项可引出一子菜单 为每个菜单选项添加WM_COMMAND消息映射和对应的消息处理函数ON_COMMAND(id,memberFxn),3.10 图标、快捷键和字符串表,这些资源数据都可通过资源编辑器创建或编辑,3.11 工具条与状态条,在MFC中,通过CToolBar类和CStatusBar类控制工具条和状态条。,3.12 更新命令用户接口消息

20、,UPDATE_COMMAND_UI就是更新命令用户接口消息,专门用于处理菜单项和工具条钮的更新。,编程与调试:向项目中添加资源,使用Developer Studio的菜单选项Insert/Resource调出Insert Resource对话框 选择相应的资源如Bitmap、Icon和Menu等 按下New按钮进入相应的资源编辑器,编程与调试:资源编辑器,图标编辑器 位图编辑器 菜单编辑器 快捷键编辑器字符串表编辑器,基本范例,例3-1 编一程序,允许用鼠标左键拖动一个椭圆在客户区内移动 例3-2 显示一张位图文件(并能够通过菜单选择缩小显示、正常显示和放大显示)。,学好程序设计语言的唯一途径是 你的编程能力与你在计算机上投入的时间成,结束语,上机练习,正比,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号