第五章:图形设备接口(GDI)、颜色及字体

1.通常窗口的客户区并不包括边框、标题栏和菜单栏.因此如果创建了一个CClientDC对象,则该设备环境的映射区域也仅限于客户区域,即用户不可能在客户区域之外绘图.如果创建的是CWindowDC对象那么点(0,0)指的就是整个屏幕的左上角,这时就允许用户在显示器的任何地方绘图.包括窗口边框、标题栏等等.

但是我们要记住:视图窗口没有非客户区,因此CWindowDC更适合于框架窗口,而不是视图窗口.

警告:千万不要删除作为参数以指针形式传递给OnDraw函数的CDC对象,应用程序框架会自动控制他的删除

2.当利用CDC绘图时,我们所绘制的图形都要依赖于设备环境当前状态:

    ■被选中的GDI绘图对象,如笔,刷子和字体

■决定绘制时缩放尺寸的映射模式

■其他细节,如文本的对其参数,多边形的填充状态

3.GDI派生列表:

CBitmap:位图是一种位矩阵,每一个显示像素都对应于其中一个或者多个位我们可以用它来表示图像和刷子

CBrush:刷子定义了一种位图形式的像素,利用它可对区域内部填充颜色

CFont:字体是一种具有某种风格和尺寸的所有字符的完整集合,它常当作资源存于磁盘中,其中还有一些依赖于某种设备

CPalette:调色板是一种颜色映射接口,它允许应用程序在不干扰其他应用程序的前提下可以充分利用输出设备的颜色描绘能力

CPen:笔是一种用来画线及绘制有型边框的工具

CRgn:区域是由多边形、椭圆或者二者组合形成的一种范围利用它可用来填充,裁剪及鼠标的点中测试

4.如果个构造了一个CGdiObject派生类对象,则在退出程序之前必须先将它删除

5.MFC库函数SelectStockObject可以把一个库存对象选进设备环境中,并返回原先被选中的对象的指针.同时使得该对象被分离出来

    利用删除由selectObject返回的指针指向的对象时,如果该对象是由我们自己申请的,那么就可以删除它.如果是临时的则由它说指向的对象也许是最初被选进设备环境的,所以不能将此对象删除.

6.面向颜色的GDI函数可以接收32COLORREF参数,这种类型的参数分别包含了8位红绿蓝颜色值.

7.系统内含的打印机字体的尺寸都是以磅为单位来进行定义的.此时我们选择的映射模式是MM_TWIPS映射模式,只有在打印和显示的映射模式都被置为MM_TEXT情况下(此时一个像素或点相当于一个逻辑单位),显示和打印才能够得到精确的匹配

int GetDeviceCaps(int nIndex) const;//捡取有关显示设备的特殊设备宽列信息

返回值:如果成功,则返回所需要的能力值。

参数:

nIndex

指定返回信息类型,可为下列值之一:

·

DRIVERVERSION

版本号,例如:0x100表示1.0

·

TECHNOLOGY

设备技术,可为下列值之一:

含义

DT_PLOTTER

矢量绘图机

DT_RASDISPLAY

光栅显示

DT_RASPRINTER

光栅打印机

DT_RASCAMERA

光栅照相机

DT_CHARSTREAM

字符流

DT_METAFILE

元文件

DT_DISPFILE

显示文件

·

HORZSIZE

物理显示宽度(以毫米为单位)。

·

VERTSIZE

物理显示高度(以毫米为单位)。

·

HORZRES

显示宽度(用像素表示)。

·

VERTRES

显示高度(用光栅线表示)。

·

LOGPIXELSX

沿显示宽度方向,每一逻辑单位的像素数。

·

LOGPIXELSY

沿显示高度方向,每一逻辑单位的像素数。

·

BITPIXEL

每一像素的颜色字节数。

·

PLANES

颜色位面数。

·

NUMBRUSHES

指定设备的画刷数目。

·

NUMPENS

指定设备的画笔数目。

·

NUMFONTS

指定设备的字体数目。

·

NUMCOLORS

设备颜色表的入口数目。

·

ASPECTX

用于描线的设备像素的相对宽度。

·

ASPECTY

用于描线的设备像素的相对高度。

·

ASPECTXY

用于描线的设备像素的对角线宽度。

·

PDEVICESIZE

PDEVICE内部数据结构的尺寸。

·

CLIPCAPS

设备的剪切能力。可以为以下值之一:

含义

CP_NONE

输出不被剪切

CP_RECTANGLE

输出被剪切到矩形

CP_REGION

输出被剪切到区域

·

SIZEPALETTE

系统调色板的入口数。只有设置驱动程序在RASTERCAPS索引中设置了RC_PALETTE,该参数才有效。

·

NUMRESERVER

系统调色板的保留的入口数。只有设置驱动程序在RASTERCAPS索引中设置了RC_PALETTE,该参数才有效。

·

COLORRES

设备实际的颜色分辨率,用位/像素表示。只有设置驱动程序在RASTERCAPS索引中设置了RC_PALETTE,该参数才有效。

·

RASTERCAPS

表示设备光栅能力的值。可以为以下值的组合:

含义

RC_BANDING

需要绑定支持

RC_BIGFONT

支持大于64K的字体

RC_BITBLT

具有传输位图的能力

RC_BITMAP64

支持大于64K的位图

RC_DEVBITS

支持设备位图

RC_DI_BITMAP

具有支持SetDIBitsGetDIBits Windows 函数的能力

RC_DIBTODEV

具有支持SetDIBitsToDevice Windows 函数的能力

RC_FLOODFILL

具有全面填充能力

RC_GD120_OUTPUT

支持Windows 2.0RC_GD120_STATE设备上下文中包括状态块

RC_NONE

不支持光栅操作

RC_OP_DX_OUTPUT

支持设备白底和DX数组

RC_PALETTE

指定基于调色板的设备

RC_SAVEBITMAP

支持在本地保存位图的能力

RC_SCALING

具有缩放能力

RC_STRETCHBLT

能执行StretchBlt成员函数

RC_STRETCHDIB

能执行Windows StretchDIBits函数

·

CURVECAS

设备的曲线能力。可为以下值的组合:

含义

CC_NONE

支持曲线

CC_CIRCLES

支持圆

CC_PIE

支持饼图

CC_CHORD

支持弧

CC_ELLIPSES

支持椭圆

CC_WIDE

支持宽边界

CC_STYLED

支持边界风格

CC_WIDESTYLED

支持加宽的边界风格

CC_INTERIORS

支持内部功能

CC_ROUNDRECT

支持圆角矩形

·

LINECAPS

设备的绘制直线能力。可为以下值的组合:

含义

LC_NONE

不支持直线

LC_POLYLINE

支持多直线

LC_MARKER

支持标记

LC_POLYMARKER

支持多标记

LC_WIDE

支持加宽直线

LC_STYLED

支持直线风格

LC_WIDESTYLED

支持加宽的直线风格

LC_INTERIORS

支持内部功能

·

POLYGONALCAPS

设备绘制多边形的能力。可为以下值的组合:

含义

PC_NONE

不支持多边形

PC_POLYGON

支持多边形

PC_RECTANGLE

支持矩形

PC_WINDPOLYGON

支持多边形的弯曲数目

PC_SCANLINE

支持扫描直线

PC_WIDE

支持加宽边界

PC_STYLED

支持边界风格

PC_WIDESTYLED

支持加宽的直线风格

PC_INTERORS

支持内部功能

·

TEXTCAPS

设备绘制文本的能力。可为以下值的组合:

含义

TC_OP_CHARACTER

支持字符精确输出,设备可将设备字体置于任何像素位置。这要求设备带有设备字体

TC_OP_STROKE

支持笔画精确输出,设备可覆盖设备字体的重复动作

TC_CP_STROKE

支持笔画剪切输出,设备可在像素边界剪切设备字体

TC_CR_90

支持90度的字符旋转,设备一次只能旋转字符90

TC_CR_ANY

支持任意角度的字符旋转

TC_SF_X_YINDEP

支持x,y方向上的独立度量,设备可以分别从x,y方向上度量设备字体

TC_SA_DOUBLE

支持度量倍增字符,设备可将设备字体放大一倍

TC_SA_INTEGER

支持整数倍度量。设备可将设备字体放大至任意整数倍

TC_SA_CONTIN

支持任意倍度量。设备可将设备字体放大至任意倍。但仍保持XY的比率

TC_EA_DOUBLE

支持字符重量加倍,设备字体可设置为粗体。如果此位没有设置打印驱动程序。GDI将通过两次打印的方法创建粗体的设备字体

TC_IA_ABLE

支持斜体字符,设备字体可设置为斜体。如果此位没有设置,GDI认为不能得到斜体

TC_UA_ABLE

支持下划线,设备字体可设置为下划线。如果此位没有设置,GDI为设备字体创建下划线

TC_SO_ABLE

支持空心字符,设备字体可设置为空心。如果此位没有设置,GDI为设备字体创建空心

TC_RA_ABLE

支持光栅字体,GDI应为设备列举可用的光栅或TrueType字体,以便对EnumFontsEnumFontFamilies函数的调用作出反应。如果此位没有设置,当这些函数调用时,光栅或字体不会加以列举

TC_VA_ABLE

支持矢量字体,GDI应为设备列举可用的矢量或TrueType字体,以便对EnumFontsEnumFontFamilies函数的调用作出反应。这对矢量设备很重要(如绘图机),显示程序(它们必须使用光栅字体)和光栅打印驱动程序列举矢量字体,因为GDI在将矢量字体送到驱动程序之前要将其进行光栅处理

TC_RESERVED

反转,必须设置为0


说明:检取有关显示设备的特殊设备宽列信息。

其中,利用HORZSIZEVERTSIZE表示显示器的物理尺寸(这些值并不一定正确,因为Windows并不知道连接到显示适配器的显示器的真实尺寸).我们可以利用HORZSIZE乘以LOGPIXELSX,VERTSIZE乘以LOGPIXELSY来计算显示器的尺寸.用这种方法得到的是显示器的逻辑尺寸

把影射模式设置为逻辑twips的代码:

       pDC->SetMapMode(MM_ANISOTROPIC);

      pDC->SetWindowExt(1440, 1440);

       pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),

                                          -pDC->GetDeviceCaps(LOGPIXELSY));

CDC::GetTextFace

int GetTextFace(int nCount,LPTSTR lpszFacename)const;

返回值:拷贝到缓冲区的字节数,不包括空终止符,如果出错,则返回0

参数:nCount:指定缓冲区的大小

    lpszFacename:字体名称缓冲区

说明:调用该成员函数将使用当前的字体的字体名拷贝到缓冲区中.

你可能感兴趣的:(数据结构,windows,Integer,character,图形,output)