zoukankan      html  css  js  c++  java
  • MFC中GDI之CBrush(画刷)

    CBrush 画刷主要是修饰一个闭合图形内部的填充内容,包括填充色、填充影线和填充位图等。

    CBrush(COLORREF crColor) 在构造函数中根据填充色创建画刷
    CBrush(int nIdex, COLORREF crColor) 在构造函数中根据颜色和影线创建画刷
    CBrush(CBitmap* pBitmap) 在构造函数中根据平铺位图创建画刷
    BOOL CreateSolidBrush(COLORREF crColor) 根据填充色创建画刷
    BOOL CreateHatchBrush(int nIndex, COLORREF crColor) 根据颜色和影线创建画刷
    BOOL CreatePatternBrush(CBitmap* pBitmap) 根据平铺位图创建画刷
    BOOL CreateBrushIndirect(const LOGBRUSH* lpBrush) 根据LOGBRUSH结构体创建画刷
    static CBrush* FromHandle(HBRUSH hBrush) 将HBRUSH句柄转换为CBrush对象
    operator HBRUSH() const 从CBrush对象获取HBRUSH句柄
    int GetLogBrush(LOGBRUSH* pLogBrush) 获取画刷的颜色和影线等属性信息

    wingdi.ini中的一些定义:

    /* Brush Styles */
    #define BS_SOLID            0
    #define BS_NULL             1
    #define BS_HOLLOW           BS_NULL
    #define BS_HATCHED          2
    #define BS_PATTERN          3
    #define BS_INDEXED          4
    #define BS_DIBPATTERN       5
    #define BS_DIBPATTERNPT     6
    #define BS_PATTERN8X8       7
    #define BS_DIBPATTERN8X8    8
    #define BS_MONOPATTERN      9
    
    /* Hatch Styles */
    #define HS_HORIZONTAL       0       /* ----- */
    #define HS_VERTICAL         1       /* ||||| */
    #define HS_FDIAGONAL        2       /* \\ */
    #define HS_BDIAGONAL        3       /* ///// */
    #define HS_CROSS            4       /* +++++ */
    #define HS_DIAGCROSS        5       /* xxxxx */
    
    
    /* Logical Brush (or Pattern) */
    typedef struct tagLOGBRUSH
      {
        UINT        lbStyle;
        COLORREF    lbColor;
        LONG        lbHatch;
      } LOGBRUSH, *PLOGBRUSH;
    

     例子:

    void CMFC7_5BrushDlg::OnPaint() 
    {
        CPaintDC dc(this); // device context for painting
        // 创建纯色画刷
        CBrush b1(RGB(0,255,255));//青色
    /*    CBrush b1;
        b1.CreateSolidBrush(RGB(0,255,255)); */ //这两句等价于上面的一句
        dc.SelectObject(&b1);
        CRect rect(10,10,110,160);
        dc.RoundRect(&rect,CPoint(20,20));
        // 创建格栅画刷
        CBrush b2(HS_CROSS,RGB(0,0,255));
    /*    CBrush b2;
        b2.CreateHatchBrush(HS_FDIAGONAL,RGB(255,0,0)); */
        dc.SelectObject(&b2);
        CRect rect2(120,10,220,160);
        dc.RoundRect(&rect2,CPoint(20,20));
        // 创建位图画刷
        CBitmap bmp;
        bmp.LoadBitmap(IDB_BITMAP1);
        CBrush b3(&bmp);
    /*    CBrush b3;
        b3.CreatePatternBrush(&bmp); */
        dc.SelectObject(&b3);
        CRect rect3(230,10,340,160);
        dc.RoundRect(&rect3,CPoint(20,20));
        // 创建一个空画刷
        CBrush b4;
        LOGBRUSH logBrush = {BS_NULL};
        b4.CreateBrushIndirect(&logBrush);
        dc.SelectObject(&b4);
        CPoint ps[] ={CPoint(170, 10),CPoint(120, 150),CPoint(220, 150)};
        dc.Polygon(ps, sizeof(ps)/sizeof(ps[0]));
    
        // 还有一种更简单的方式(一句代码包括了创建和选择)
        // CDC::SelectStockObject 选择储备的对象
    /*
        virtual CGdiObject* SelectStockObject ( int nIndex ); 
            Parameters :    nIndex 
        The kind of stock object desired. It can be one of the following values: 
            BLACK_BRUSH                Black brush. 
            DKGRAY_BRUSH            Dark gray brush. 
            GRAY_BRUSH                Gray brush. 
            HOLLOW_BRUSH            Hollow brush.  == NULL_BRUSH
            LTGRAY_BRUSH            Light gray brush. 
            NULL_BRUSH                Null brush. 
            WHITE_BRUSH                White brush. 
            BLACK_PEN                Black pen. 
            NULL_PEN                Null pen. 
            WHITE_PEN                White pen. 
            DEVICE_DEFAULT_FONT        Device-dependent font. 
            SYSTEM_FONT                The system font  
    */
        dc.SelectStockObject(GRAY_BRUSH);
        dc.Rectangle(20,200,80,250);
    }

     结果:

    ----------------------------------

    注:参考吕鑫MFC的7.5章节

    // 创建一个空画刷的方法:

    1.

    CBrush b4;
    LOGBRUSH logBrush = {BS_NULL};
    b4.CreateBrushIndirect(&logBrush);
    dc.SelectObject(&b4);//将空画刷选入设备描述表

    2.

    CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    CBrush *pOldBrush = dc.SelectObject(pBrush);

    3.

    dc.SelectStockObject(NULL_BRUSH);

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    备忘链接执行js时注意target必须是_self或者_top
    windows2003 Server远程连接Event Error;event id:12517,12503,1111
    网站配置了Url重写的Handler会导致虚拟目录找不到dll
    SEO 搜索引擎优化技巧
    11款开源Wiki管理系统
    收集了几个优秀的设计公司网站
    8款开源聊天系统和程序/Open Chat
    制作Web应用程序安装程序的方法
    转:推荐21套非常棒的网页设计图标素材
    14款开源文档管理系统
  • 原文地址:https://www.cnblogs.com/htj10/p/11945810.html
Copyright © 2011-2022 走看看