版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七部分 图形设备接口 设备环境类和图形对象设备环境类和图形对象 n设备环境设备环境 n图形设备接口图形设备接口 MFC应用程序在硬件上绘图的抽象层次应用程序MFC设备环境类图形设备接口(GDI)设备驱动程序物理设备硬件设备环境设备环境n在在Windows程序中,应用程序的输出并不直接面向物理的设程序中,应用程序的输出并不直接面向物理的设备,如显示屏或打印机,而是针对一个称之为设备环境(备,如显示屏或打印机,而是针对一个称之为设备环境(Device Context)的逻辑设备进行操作,设备环境与实际设备)的逻辑设备进行操作,设备环境与实际设备之间的信息传送由之间的信息传送由Windows直接管
2、理。直接管理。 设备环境类设备环境类nCDCCDC类类 lCPaintDClCClientDClCWindowDClCMetaFileDC图形对象类图形对象类nCGdiObjectCGdiObject类类lCPenlCBrushlCfontlCbitmaplCpalettelCRgnWindows应用程序资源应用程序资源n资源:是一种数据,它包含了决定程序的用户界资源:是一种数据,它包含了决定程序的用户界面的文本和图形。面的文本和图形。n资源所决定的界面元素有:资源所决定的界面元素有:l菜单l加速键l位图、光标、图标l对话框、控件l字符串l工具栏资源脚本文件和资源头文件资源脚本文件和资源头文件
3、n资源文件资源文件l.rcl定义资源内容l资源通过资源标识符加以区别n资源头文件资源头文件lResource.hl定义一个项目中所有的资源标识符库存图形对象库存图形对象 nCGdiObject Class MembersCGdiObject:CreateStockObject BOOL CreateStockObject( int nIndex );Return ValueNonzero if the function is successful; otherwise 0.n掌握掌握SelectStockObject()方法方法n不必存储和恢复原来的图形对象不必存储和恢复原来的图形对象 例例:
4、 用鼠标切换椭圆的图形参数用鼠标切换椭圆的图形参数 修改文档类的定义(头文件),加入二个变量定义:修改文档类的定义(头文件),加入二个变量定义:class CMyDoc : public CDocumentprotected: / create from serialization onlyCMyDoc();DECLARE_DYNCREATE(CMyDoc)/ Attributespublic: int m_nColor;CRect m_rectEllipse;/ Operationspublic:(以下省略文档类的其它定义语句以下省略文档类的其它定义语句)例例: 用鼠标切换椭圆的图形参数(续
5、用鼠标切换椭圆的图形参数(续1 1)修改文档类的修改文档类的OnNewDocument函数,对变量进行初始化:函数,对变量进行初始化:BOOL CMyDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/ TODO: add reinitialization code here/ (SDI documents will reuse this document)m_rectEllipse = CRect(100,100,300,250);m_nColor = 0;return TRUE; 例例:用鼠标切换椭圆的图形参数(续用
6、鼠标切换椭圆的图形参数(续2 2)修改视图类的修改视图类的OnDraw函数,加入显示椭圆代码:函数,加入显示椭圆代码:void CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereswitch(pDoc-m_nColor) /根据颜色变量值决定用不同的画刷根据颜色变量值决定用不同的画刷case 0:pDC-SelectStockObject(GRAY_BRUSH);break;case 1:pDC-SelectStock
7、Object(LTGRAY_BRUSH);break;case 2:pDC-SelectStockObject(BLACK_BRUSH);break;pDC-Ellipse(pDoc-m_rectEllipse); /画椭圆画椭圆例例:用鼠标切换椭圆的图形参数(续用鼠标切换椭圆的图形参数(续3 3)用用ClassWizard建立鼠标左键的消息处理函数,并加入代码建立鼠标左键的消息处理函数,并加入代码void CMyView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here an
8、d/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);画笔与画刷画笔与画刷 CPen类:类:成员函数成员函数CreatePen()()用于创建画笔,其原型为:用
9、于创建画笔,其原型为:BOOL CreatePen (int nPenStyle, int nWidth, COLORREF crColor);第第1个参数是画笔样式,可取个参数是画笔样式,可取 画笔样式画笔样式说明说明PS_SOLID创建实线笔创建实线笔PS_DASH创建由短线构成的虚线创建由短线构成的虚线PS_DOT创建由点构成的虚线创建由点构成的虚线PS_DASHDOT创建由短线和点构成的虚线创建由短线和点构成的虚线PS_DASHDOTDOT创建由短线、点、点构成的虚线创建由短线、点、点构成的虚线PS_NULL创建空(空白)画笔创建空(空白)画笔CBrush类类创建画刷的成员函数的原型为
10、:创建画刷的成员函数的原型为:BOOL CreateSolidBrush ( COLORREF crColor );BOOL CreateHatchBrush ( int nIndex, COLORREF crColor );其中参数其中参数nIndex指定了阴影风格,可取值为:指定了阴影风格,可取值为:阴影风格阴影风格说明说明HS_BDIAGONAL从左下角到右上角的从左下角到右上角的45度斜线度斜线HS_CROSS水平线与垂直线水平线与垂直线HS_DIAGCROSS相互垂直的相互垂直的45度线度线HS_FDIAGONAL从左上角到右下角的从左上角到右下角的45度斜线度斜线HS_HORIZO
11、NTAL水平线水平线HS_VERTICAL垂直线垂直线CDC:SelectObject()()函数原型函数原型nCPen* SelectObject( CPen* pPen );nCBrush* SelectObject( CBrush* pBrush );nvirtual CFont* SelectObject( CFont* pFont );位图位图n向项目中添加资源向项目中添加资源: Developer Studio的的Insert/Resource菜单选项菜单选项n载入位图资源:载入位图资源:使用使用 CBitmap类的成员函数类的成员函数BOOL LoadBitmap( LPCTST
12、R lpszResourceName );BOOL LoadBitmap( UINT nIDResource );n建立一合适的内存设备环境并将位图选入该设备环境:建立一合适的内存设备环境并将位图选入该设备环境:CDC MemDC;MemDC. CreateCompatibleDC(NULL);MemDC.SelectObject(&m_Bitmap);n从内存设备环境中将位图复制到指定设备从内存设备环境中将位图复制到指定设备:使用使用 CDC: BitBlt使用使用 CDC: StretchBlt显示一张位图文件(显示一张位图文件(.BMP)修改视图类的定义(头文件),加入修改视图类的定义(
13、头文件),加入3个变量定义:个变量定义:/ MyView.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)(以下省略其它定义语句)以下省略其它定义语句);显示一张位图文件(显示一张位图文件(
14、.BMP)()(续续1)修改视图类的构造函数:修改视图类的构造函数:/ CMyView construction/destructionCMyView:CMyView()/ TODO: add construction code here/ 载入位图资源,读位图信息载入位图资源,读位图信息m_Bitmap.LoadBitmap(IDB_BITMAP1);BITMAP BM;m_Bitmap.GetBitmap(&BM);m_nWidth = BM.bmWidth;m_nHeight = BM.bmHeight;显示一张位图文件(显示一张位图文件(.BMP)()(续续2)修改视图类的修改视图类的
15、OnDraw函数,显示位图:函数,显示位图:/ CMyView drawing/ 响应绘制窗口客户区消息响应绘制窗口客户区消息void CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ 显示位图显示位图CDC MemDC;MemDC.CreateCompatibleDC(NULL);MemDC.SelectObject(&m_Bitmap);pDC-BitBlt(0,0,m_nWidth,m_nHeight,&Me
16、mDC,0,0,SRCCOPY);CDC:BitBlt BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );nx,y用于指定目标矩形区域的左上角坐标用于指定目标矩形区域的左上角坐标nnWidth,nHeight为目标区域的宽度和高度为目标区域的宽度和高度npSrcDC是指向源设备对象的指针是指向源设备对象的指针nxSrc,ySrc源位图的左上角坐标源位图的左上角坐标ndwRop决定了位图的显示方式决定了位图的显示方式CDC:StretchBlt n实现图像缩放输出实现图像缩放输出 BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );菜单菜单n编辑菜单资源:编辑菜单资源:使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 芹菜纤维与糯米淀粉相容性及物化性质研究
- 俄语科普访谈语法隐喻研究
- 2024年青岛农业大学海都学院高职单招职业技能考试题库附参考答案详解【考试直接用】
- 2024年湖南化工职业技术学院高职单招职业技能考试题库附答案详解(培优A卷)
- 2025年四川广安广安区职业学院高职单招职业技能考试题库及完整答案详解【夺冠】
- CMPs基复合膜-气凝胶的制备及其放射性碘吸附性能研究
- 阿昔洛韦凝胶贴膏的制备及海绵骨针对其促渗作用的研究
- 2024年怀化数字产业职业学院高职单招职业技能考试模拟试卷带答案详解(考试直接用)
- 2027年滏阳职业学院高职单招职业适应性测试考试题库【网校专用】附答案详解
- 2027年河南太行职业学院单招职业技能考试模拟试卷【典优】附答案详解
- 1801综采工作面瓦斯综合治理技术方案
- 《全面质量成本管控体系构建与实施指南》
- DB33T 881-2012 浙江省地质灾害危险性评估规范
- 2024版学校印刷服务合同:学校教材及宣传资料印刷合同3篇
- 妊娠期干燥综合征
- 磁场对通电导线的作用力 说课课件 -2024-2025学年高二下学期物理人教版(2019)选择性必修第二册
- YYT 0664-2008 医疗器械软件 软件生存周期过程
- DZ∕T 0287-2015 矿山地质环境监测技术规程(正式版)
- 2023年小学信息技术教师选调进城考试试卷
- 精准放射治疗技术及临床应用
- 腰椎退行性病变的诊断和治疗
评论
0/150
提交评论