MFC GDI笔记 转
学习MFC过程中从书中提炼出来的表格,方便使用。设备描述表属性、GDI画笔和CPen类、GDI画刷和CBrush类、主要的GDI颜色、CDC文本函数、GDI文本对齐方式、常用设备对象。
设备描述表属性
当使用CDC输出函数在屏幕画图时,输出的某些特性并没有在函数调用过程中规定,但可以通过设备描述表自身获得。如果想忽略背景颜色,可将背景模式设置为“transparent”。
Attribute Default Set with Get with
文本颜色 Black CDC::SetTextColor CDC::GetTextColor
背景颜色 White CDC::SetBkColor CDC::GetBkColor
背景模式 OPAQUE CDC::SetBkMode CDC::GetBkMode
映射模式 MM_TEXT CDC::SetMapMode CDC::GetMapMode
绘图模式 R2_COPYPEN CDC::SetROP2 CDC::GetROP2
当前位置 (0,0) CDC::MoveTo CDC::GetCurrentPosition
当前画笔 BLACK_PEN CDC::SelectObject CDC::SelectObject
当前画刷 WHITE_BRUSH CDC::SelectObject CDC::SelectObject
当前字体 SYSTEM_FONT CDC::SelectObject CDC::SelectObject
『 不同的CDC函数以不同方式使用设备描述表的属性。例如,LineTo画线时,当前画笔决定线的颜色、宽度和样式。用Rectangle函数画矩形时,GDI用当前画笔画矩形边界,并用当前画笔填充矩形区域。所有文本输出函数都采用当前字体。文本输出时,文本颜色决定了字符颜色,而背景颜色决定字符后面的填充色。在使用LineTo函数画虚线或点时,背景颜色还用于填充线段间空隙。
可用SelectObject选入设备描述表的6个对象:1、画笔(Pen) 2、画刷(Brush) 3、字体(Font) 4、位图(Bitmap) 5、调色板(Palette) 6、区域(Region)。
每逢OnPaint被调用时都要将所需要的画笔和画刷选入设备描述表。如果不想反复对它进行初始化设定,可以用CDC::SaveDC函数保存状态,并在下次使用时用CDC::ResrotreDC将它回复。另一种方法是,注册一个自定义的WNDCLASS,其中包含CS_OWNDC样式。』
GDI画笔和CPen类
CPen *OldPen = dc.SelectObject(&pen);
如果要改变画线方式,则需要创建一个GDI画笔,并由SelectObject将它选入设备描述表。
画笔样式 描述
PS_SOLID 实线
PS_DASH 破折虚线
PS_DOT 点虚线
PS_DASHDOT 破折-点虚线
PS_DASHDOTDOT 破折-点-点虚线
PS_NULL 空画笔
PS_INSIDEFRAME 框内实线*
『 创建画笔最简单的方法就是构造一个CPen对象并把参数都传送给该对象:
CPen pen(int nPenStyle, int nWidth, COLORREF crColor);
创建GDI画笔第二种方法就是调用CPen::CreatePen。还有一种方法时向LOGPEN结构中填充苗粟画笔特性的参数,然后调用CPen::CreatePenIndirect生成画笔。』
GDI画刷和CBrush类
CBrush *OldBrush = dc.SelectObject(&brush);
画刷有三种基本样式:单色,带阴影和带图案。当用阴影线画刷时,Windows用默认背景色(白色)填充阴影线空白处,用CDC::SetBkColor改变背景色,或用CDC::SetBkMode把背景模式OPAQUE改为TRANSPARENT禁止背景填充。
阴影样式 样式
HS_BDIAGONAL 向后对角线
HS_CROSS 十字网格
HS_DIAGCROSS 斜十字网格
HS_FDIAGONAL 向前对角线
HS_HORIZONTAL 水平线
HS_VERTICAL 竖直线
『 创建画刷有两种方式,使用构造函数或Create函数。
构造函数:CBrush(COLORREF crColor);
CBrush(int nIndex, COLORREF crColor);
CBrush(Cbitmap *pBitmap)。
Create函数:CBrush::CreateSolidBrush(COLORREF crColor);
CBrush::CreateHatchBrush(int nIndex, COLORREF crColor);』
主要的GDI颜色
颜色 R G B 颜色 R G B
黑 0 0 0 浅灰 192 192 192
蓝 0 0 192 亮蓝 0 0 255
绿 0 192 0 亮绿 0 255 0
青 0 192 192 亮青 0 255 255
红 192 0 0 亮红 255 0 0
品红 192 0 192 亮品红 255 0 255
黄 192 192 0 亮黄 255 255 0
深灰 128 128 128 白 255 255 255
CDC文本函数
函数 说明
DrawText 在式化矩形中显示文本
TextOut 在当前或指定位置输出一行文本
TabbedTextOut 输出一行含有制表符的文本
ExTextOut 输出一行文本,并有选择地给矩形填充背景颜色或改变字符间距
GetTextExtent 计算当前字体下一个字符串宽度
GetTabbedTextExtent 计算当前字体下含有制表符字符串地宽度
GetTextMetrics 返回当前字体度量(字符高度、字符平均宽度等)
SetTextAlign 给TextOut和其他输出函数设定对齐参数
SetTextJustification 确定对齐一串文本时需要增加的宽度
SetTextColor 设定设备描述表的文本输出颜色
SetBkColor 设定设备描述表的背景颜色,即确定输出字符背后的填充色
GDI文本对齐方式
UINT CDC::SetTextAlign(UINT nFlags);
默认方式下,传递给TextOut等函数的坐标值都确定了文本最左上角的位置。函数SetTextAlign指定了点和文本外矩形的对齐方式。设置TA_UPDATECP后,TextOut忽略参数坐标而使用DC当前位置。
对齐方式 样式
TA_CENTER 矩形水平方向中点对齐到点
TA_LEFT 矩形左边界对齐到点(默认)
TA_RIGHT 矩形右边界对齐到点
TA_BASELINE 字体基线对齐到点
TA_BOTTOM 矩形下边界对齐到点
TA_TOP 矩形上边界对齐到点(默认)
TA_NOUPDATECP 输出文本后不更新当前位置(默认)
TA_UPDATECP 输出文本后更新当前X位置至文本右边界处
常用设备对象
Window预先定义了一些画笔、画刷等GDI对象。用CDC::SelectStockObject将这些备用对象选入设备描述表,或用CgdiObject::CreateStockObject将它们赋给已有的CPen、CBrush等对象。CgdiObject表示GDI对象的一个基本类。
设备对象 说明
NULL_PEN 不画任何东西的画笔
BLACK_PEN 画一个象素宽实现的黑笔
WHITE_PEN 画一个象素宽的白笔
NULL_BRUSH 不画任何东西的画刷
HOLLOW_BRUSH 不画任何东西的画刷(同NULL_BRUSH)
BLACK_BRUSH 黑色画刷
DKGRAY_BRUSH 深灰色画刷
GRAY_BRUSH 中性灰色画刷
LTGRAY_BRUSH 浅灰色画刷
WHITE_BRUSH 白色画刷
ANSI_FIXED_FONT 固定间距的ANSI字体
ANSI_VAR_FONT 变间距的ANSI字体
SYSTEM_FONT 变间距系统字体
SYSTEM_FIXED_FONT 固定间距系统字体