资源描述:
《vc++2教学ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VisualC++程序设计东北大学陈东明2021/8/311第2章图形设备接口许多MS-DOS程序直接向视频存储区或打印机输入当前数据,但不利之处是必须提供相应的驱动程序;Windows提供GDI抽象接口,可调用GDI函数和硬件打交道,自动将设备环境描述表映射到相应的物理设备,提供输入/输出指令。2021/8/3121、GDI和CGdiObject类GDI管理来自于Windows系统的所有图形输出,与设备无关实体类:Cpen,Cbrush,Cfont,Cbitmap,Cpalette,CRgn等,它们的抽象基类是CGdiOb
2、ject。GDI提供绘图函数,通过设备驱动程序定义了统一的程序设计接口。构造CGdiObject派生类的对象有两种方法:1)一步构造法(构造和初始化一步完成)如:CPenmyPen(PS_SOLID,3,RGB(255,0,0));//3个单位粗的红色实线2)两步构造法(更安全)如:CpenmyPen;//1个单位粗的黑色点线myPen.CreatePen(PS_DOT,1,RGB(0,0,0));2021/8/3132、DC和CDC类当用户往GDI设备中绘图时,要访问一个称为DC的数据结构好比绘画要画纸,计算机中Windo
3、ws提供了DC供绘图在DC(设备环境)中作图,就是在设备环境的位图上作图。CDC类封装了Windows的DC,当用户构造CDC类的对象时,VC++会创建相应的WindowDC,并将两者相联。用户只要对CDC对象操作即可,用VC++去操作WindowsDC实体。MFC提供了CDC的派生类:CPaintDC(针对OnPaint而做的)CClientDC(GetDC,ReleaseDC)(窗口客户区相关的显示DC)CWindowDC(管理与整个窗口相关的显示DC)CDC类的常用函数2021/8/3143、坐标映射Window文本图
4、形函数用逻辑单位。这些逻辑单位在显示图形对象时会自动转换成物理单位(像素),这是由映射模式决定的。设置映射模式:intCDC::SetMapMode(intnMapMode);默认为MM_TEXT,X轴向右为正,Y轴向下为正。4、绘制基本图形点,直线,圆,圆弧,矩形绘图函数2021/8/3155、画笔CPen类三种创建方法:一步构造法:CPenPen(PS_SOLID,1,RGB(255,0,0));两步构造法:CPenPen;Pen.CreatePen(PS_SOLID,1,RGB(255,0,0));填入LOGPEN结构
5、,再用CPen::CreatePenIndirect()创建样式宽度颜色库存画笔:用CreateStockObject()创建,库存画笔被定义为:WHITE_PEN,BLACK_PEN和NULL_PEN2021/8/3166、画刷CBrush类三种创建方法:一步构造法:CBrushBrush(RGB(255,0,0));两步构造法:CBrushBrush;Brush.CreateSolidBrush(RGB(255,0,0));填入LOGBRUSH结构,再用CBrush::CreateBrushIndirect()创建阴影画
6、刷:两种创建方法CBrushBrush(HS_DIAGCROSS,RGB(255,0,0));CBrushBrush;Brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));2021/8/3177、文本与字体CFont类文本的显示输出是应用程序设计中一项寻常而且重要的内容。计算机中要显示文本,先得确定一种字体。Windows中提供的字体大多是TrueType字体,它吸收了点阵字体和矢量字体的优点,所见即所得。1)CFont类:是CGdiObject的派生类,封装了Windows中的
7、字体实体要使用字体,先得创建,然后将其选进要进行文本输出的DC,再用文本输出函数显示该字体的文本内容。创建字体(必须用两步构造法):CFontmyFont;myFont.CreateFont(…);//并不是创建一种物理字体而是创建一种逻辑字体2021/8/3182)显示文本:CDC*pDC=GetDC();pDC->TextOut(20,20,”Thisistext.”);有关函数:SetTextColor(),GetTextColor(),SetBkColor(),GetBkColor(),SetBkMode(),Get
8、BkMode()得到文本的度量:TEXTMETRICtextMetrics;pDC->GetTextMetrics(&textMEtrics);(当显示空间有限,而字体又过大时,文本就会“溢出”,所以应确定字体大小,计算行间距。)2021/8/319问题Q1、如果只希望显示画笔和画刷中的一