欢迎来到天天文库
浏览记录
ID:26677694
大小:1.54 MB
页数:36页
时间:2018-11-28
《大学visualc案例教程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、大学VisualC++案例教程第三讲图形设备接口和资源编程西安交通大学计算机教学实验中心http://ctec.xjtu.edu.cn教学目标Windows的图形设备接口MFC的设备环境类和图形对象授课内容3.1设备环境类和图形对象3.2库存图形对象3.3画笔与画刷3.4字体3.5绘图模式3.6GDI坐标系3.7WINDOWS应用程序资源3.8位图3.9菜单3.10图标、快捷键和字符串表3.11工具条与状态条3.12更新命令用户接口消息3.1设备环境类和图形对象设备环境图形设备接口MFC应用程序在硬件上绘
2、图的抽象层次应用程序MFC设备环境类图形设备接口(GDI)设备驱动程序物理设备硬件设备环境在Windows程序中,应用程序的输出并不直接面向物理的设备,如显示屏或打印机,而是针对一个称之为设备环境(DeviceContext)的逻辑设备进行操作,设备环境与实际设备之间的信息传送由Windows直接管理。设备环境类CDC类CPaintDCCClientDCCWindowDCCMetaFileDC图形对象类CGdiObject类CPenCBrushCFontCBitmapCPaletteCRgn3.2库存图形对
3、象virtualCGdiObject*SelectStockObject(intnIndex);nIndex指定要创建的图形对象图形对象说明BLACK_PEN黑笔NULL_PEN空笔,不画线或边框WHITE_PEN白笔BLACK_BRUSH黑色刷子WHITE_BRUSH白色刷子DKGRAY_BRUSH暗灰刷子GRAY_BRUSH灰色刷子LTGRAY_BRUSH淡灰色刷子NULL_BRUSH空刷子,内部不填充ANSI_FIXED_FONTWindows固定倾角(单间隔)系统字体ANSI_VAR_FONTWin
4、dows可变倾角(比例间隔)系统字体DEFAULT_GUI_FONT缺省GUI字体(如菜单和对话框字体)SYSTEM_FONT系统字体不必存储和恢复原来的图形对象【例】用鼠标切换椭圆的图形参数修改文档类的定义(头文件),加入二个变量定义:classCMyDoc:publicCDocument{protected://createfromserializationonlyCMyDoc();DECLARE_DYNCREATE(CMyDoc)//Attributespublic:intm_nColor;CRect
5、m_rectEllipse;//Operationspublic:…(以下省略文档类的其它定义语句)}【例】用鼠标切换椭圆的图形参数(续1)修改文档类的OnNewDocument函数,对变量进行初始化:BOOLCMyDoc::OnNewDocument(){if(!CDocument::OnNewDocument())returnFALSE;//TODO:addreinitializationcodehere//(SDIdocumentswillreusethisdocument)m_rectEllipse
6、=CRect(100,100,300,250);m_nColor=0;returnTRUE;}【例】用鼠标切换椭圆的图形参数(续2)修改视图类的OnDraw函数,加入显示椭圆代码:voidCMyView::OnDraw(CDC*pDC){CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereswitch(pDoc->m_nColor)//根据颜色变量值决定用不同的画刷{case0:pDC->Select
7、StockObject(GRAY_BRUSH);break;case1:pDC->SelectStockObject(LTGRAY_BRUSH);break;case2:pDC->SelectStockObject(BLACK_BRUSH);break;}pDC->Ellipse(pDoc->m_rectEllipse);//画椭圆}【例】用鼠标切换椭圆的图形参数(续3)用ClassWizard建立鼠标左键的消息处理函数,并加入代码voidCMyView::OnLButtonDown(UINTnFlags,
8、CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(pDoc->m_rectEllipse.PtInRect(point))//判断鼠标是否点在椭圆内{pDoc->m_nColor=(pDoc->m_nColor+1)%3;//修改颜色变量
此文档下载收益归作者所有