zoukankan      html  css  js  c++  java
  • 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              固定间距系统字体

  • 相关阅读:
    加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 1 The Two Fundamental Rules (1.5-1.6)
    加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 1 The Two Fundamental Rules (1.1-1.4)
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: FINAL
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 5 Window to a Wider World
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 4 Dependent Samples
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 3 One-sample and two-sample tests
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 2 Testing Statistical Hypotheses
    加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 1 Estimating unknown parameters
    求旋转数组的最小数字(剑指offer)
    Vue创建局部组件
  • 原文地址:https://www.cnblogs.com/yuzhould/p/4455025.html
Copyright © 2011-2022 走看看