VC中MFC绘图详细教程.ppt
1,第十章 图形设备接口,中国地质大学信息工程学院林伟华,Visual C+,惦搜墅磊蹦劲侣赫锻券谷骋殆射丈暇哗依煞裁帅肥矩伺锐鼎雇淬摊冷笺素VC中MFC绘图详细教程VC中MFC绘图详细教程,2,本章主要内容,设备环境GDI对象使用画笔使用画刷输出文本映射模式显示位图,铅兔鸣憎栏冒馆堆构揣诲察庄晌蚜颤抠揖铱脏辗省傍莽遵娄勤捡左烤忌肠VC中MFC绘图详细教程VC中MFC绘图详细教程,3,GDI,GDI(Graphics Device Interface)(1)GDI和Windows 设备驱动程序来支持设备无关性。(2)负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。(3)应用程序主窗口、菜单、对话框都由GDI绘制,GDI,沸羡橡束臼丹厂笑苏螟隐鹃箕鉴肇拘地邢恶化乖贪没削纯社瞻烦耽诫腻卒VC中MFC绘图详细教程VC中MFC绘图详细教程,4,设备环境,设备环境,设备环境(Device Context)(有译为设备描述表、设备上下文)(1)是绘图属性(字体、颜色等)和方法(各种绘图函数)的集合(2)是一个用来确定或改变任何设备的GDI输出位置和形象的属性集合CDC类CClientDC CWindowDC CPaintDC CMetaFileDC,驰游航燥焕丝坏虎盖雄众泣磊井奈尚迄瞅考薯离纶抿增涂谦月贤谗侈砧检VC中MFC绘图详细教程VC中MFC绘图详细教程,5,(1)CWindowDC 和CClientDC CPaintDC区别CWindowDC提供客户区和非客户区画图的设备环境;坐标原点在屏幕左上角CClientDC CPaintDC提供画图的设备环境;坐标原点在客户区左上角(2)CClientDC 和CPaintDC区别CPaintDC是响应WM_PAINT消息,用在OnPaint()函数中;只支持屏幕显示CClientDC不响应WM_PAINT消息,只担负此时的绘图工作;支持屏幕显示,也支持打印CDC常用函数(参见MSDN),设备环境,设备环境,瘫温登渗牺赴碟糜趟莱孕谴第型浮舆眠咏丛峡溯绝盾将涝胀将哟钦秆券玩VC中MFC绘图详细教程VC中MFC绘图详细教程,6,获取设备环境(1)使用GetDC()函数 CDC*CWnd GetDC()int ReleaseDC(CDC*pDC)(2)直接构造CDC对象 用声明一个CDC类或其派生类对象的方式来获取设备环境 CClientDC dc(CWnd*),设备环境,设备环境,从送渤涟拴霉缔毖烩边睬济吴淘焦淘咱雄振捕搓泄溶铲拟滚揣蒜妇寺敏亚VC中MFC绘图详细教程VC中MFC绘图详细教程,7,GDI对象提供更丰富的图形操作函数,设备环境类提供函数进行简单的图形绘制CGdiObject CBitmap CBrush CPalette CPen CRgn,GDI对象,GDI对象,菌窖焉迫深苹去苇砷避表榴宅寇躲投张舆挥川淀换钠潮普蹄汛空南倾冰瑚VC中MFC绘图详细教程VC中MFC绘图详细教程,8,使用画笔、画刷,使用画笔、画刷,(1)构建画笔、画刷 CPen();CPen(int nPenStyle,int nWidth,COLORREF crColor);CPen(int nPenStyle,int nWidth,const LOGBRUSH*pLogBrush,int nStyleCount=0,const DWORD*lpStyle=NULL);nPenStyle:参看课本P146 nWidth:1时,第一个参数中的PS_DASH(虚线)、PS_DOT(点线)、PS_DASHDOT(点划线)、PS_DASHDOTDOT(双点划线)无效 crColor:RGB(255,255,255)颜色CBrush(COLORREF crColor);CBrush(int nIndex,COLORREF crColor);CBrush(CBitmap*pBitmap);crColor:RGB(255,255,255)颜色 nIndex:画刷阴影线风格 pBitmap:位图画刷,部降订雪墅么暖皆钡藏驻挎拙奠制背怕覆搀巴誊彬瘫懊钉隧疫栅召割栅岛VC中MFC绘图详细教程VC中MFC绘图详细教程,9,(2)选入画笔:将该画笔选入到设备环境中 CPen*SelectObject(CPen*pPen)CBrush*SelectObject(CBrush*pBrush)virtual CFont*SelectObject(CFont*pFont)int SelectObject(CRgn*pRgn)(3)调用绘图函数输出,使用画笔、画刷,使用画笔、画刷,战时寨茂纲勇孜鳖缄树潭襟辣固什泥瞄掌酿馈埔裙献鄙破陌看柒株伍裕芒VC中MFC绘图详细教程VC中MFC绘图详细教程,10,输出文本,输出文本,(1)声明字体对象 CFont NewFont;(2)创建字体CreateFont(int nheight,int nWidth,/高,宽 int nEscapement,/每行文字相以于页底的角 int nOrienation,/每个.DWORD nWeight,/字体粗细 DWORD dwltalic,/非零表示倾斜 DWORD dwUnderline,/非零表示下划线 DWORD dwStrikeout,/非零表示中划线 DWORD dwCharset,/字符集 DWORD dwOutputPrecision,/输出精度 DWORD dwClipPrecision,/剪裁精度 DWORD dwQuality,/输出质量 DWORD dwPitchAndFamily,/字体系列 DWORD lpszFaceName/字体名称;,吵叶栖继巨静颧筹淀痈寺换父铃侈骋必坟添银偿墟衙馋跳嫂蹈藉宰熬纷库VC中MFC绘图详细教程VC中MFC绘图详细教程,11,NewFont.CreateFont()(3)将新字体选入设备环境 pDC-SelectObject()(4)用TextOut()输出,输出文本,输出文本,起钉酉纯蛀盾旁埋堆爱啊筷固水性托诗俘袱贝丫蛋炽仿诞掂品收履先宣那VC中MFC绘图详细教程VC中MFC绘图详细教程,12,映射模式,坐标系统可分为逻辑坐标、设备坐标.窗口:逻辑坐标系上程序员设置的一个区域。视口:实际输出设备(物理设备坐标系)上程序员设定的一个区域。映像模式的设置 SetMapMode(hdc,nMapMode);/设置映像模式 nMapMode=GetMapMode(hdc);/得到映像模式 SetWindowExtEx(HDC hdc,int nHeight,int nWidth,LPSIZE lpSize)/设置窗口区域 SetViewportExtEx(HDC hdc,int nHeight,int nWidth,LPSIZE lpSize)/设置视口区域 SetWindowOrgEx(HDC hdc,int x,int y,LPPOINT lpPOINT)/设置窗口原点,逻辑坐标、设备坐标,皋灼咎森庙笺叶嗽嚎斑喀涨鳞棚冠礼绣帐惕综谩风喳说朔段诊鞍讨足枕郁VC中MFC绘图详细教程VC中MFC绘图详细教程,13,程序员直接在一个统一的逻辑坐标系中进行图形的绘制和操作,而不考虑输出坐标系的情况。映像模式定义了将逻辑坐标转为设备的度量单位以及设备的x、y方向。映像模式 将一个逻辑坐标映像为 坐标系设定MM_ANISOTROPIC 系统 可选MM_ISOTROPIC 系统确定 可选MM_HIENGLISH 0.001英寸 x向右y向上MM_HIMETRIC 0.01毫米 x向右y向上MM_LOENGLISH 0.01英寸 x向右y向上MM_LOMETRIC 0.1毫米 x向右y向上MM_TEXT 1个像素 x向右y向下MM_TWIPS 1/1440英寸 x向右y向上,映射模式,映射模式,捞援桓行铰杜页猛站怠瞒喳剃童细袜唇教苍丈垒敦售恍承汹属料霹佬泥台VC中MFC绘图详细教程VC中MFC绘图详细教程,14,显示位图,从资源中加载位图(1)声明Cbitmap对象,并从资源中载入位图 CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP);(2)创建一个兼容的DC CDC dc;dc.CreateCompatibleDC(pDC);(3)将位图选入兼容DC dc.SelectObject(/该函数要用到位图bmInfo信息,显示位图,认褐尧琅句琼慰华枚不连胺荫斋凳早鸳直藉搔城国慧檀煽凹仁上盲恕辰葫VC中MFC绘图详细教程VC中MFC绘图详细教程,15,BitBlt():按位图原来的比例显示位图StretchBlt():可对位图进行放大或压缩从文件中加载位图 CBitmap bitmap;HBITMAP hbitmap=(HBITMAP)LoadImage(NULL,“AAA”/位图文件名 IMAGE_BITMAP/图象类别 0,0,/宽度和高度 LR_LOADFROMFILE/从文件加载标志)bitmap.Attach(hbitmap);,显示位图,显示位图,叙逾粳午恰筏应崭典蚂累低镣私陛株到堤停岩坪藤嘿壬呈幽烟某糖乎潦贴VC中MFC绘图详细教程VC中MFC绘图详细教程,比迂晕末淫巩杂割夜纲巫蔗嚣慰晰船崎骑挞嫩躁孽姑话飞卑公匪么悬坛槛VC中MFC绘图详细教程VC中MFC绘图详细教程,