注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Silence的博客

大师只有一个

 
 
 

日志

 
 

MFC笔记 - GDI绘图和CDC类  

2009-05-24 13:37:56|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

学习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             固定间距系统字体

  评论这张
 
阅读(994)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017