• 【Demo 0007】绘图对象 画笔


    正如前文所述,DC 相当黑板, 黑板有了没笔也画不了图, 现在我们就来看看画笔(GDI 图形对象之一).

    GDI 绘图对象包括: 画笔,画刷,位图,调色板,区域, 每一个绘图对象都有着自身特点和功能,今天请的画笔又有什么功能呢?  画笔主要用于绘制直线和曲线,还有着:大小, 颜

    色, 线条类型等属性; 

    一、创建画笔

         GDI提供了三种方法:

         1.  HPEN CreatePen(int fnPenStyle, nWidth, COLORREF crColor)

              fnPenStyle    - 线条的风格: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL,  PS_INSIDEFRAME

              nWidth         - 线条宽: 为0是表示单个象素宽,当设定一定宽时线条风格会自动以PS_SOLID风格显示

              crColor         - 线条颜色

         2.  HPEN CreatePenIndirect(const LOGPEN* logPen)

              typedef struct tagLOGPEN
             {
                    UINT        lopnStyle;
                    POINT       lopnWidth;
                    COLORREF    lopnColor;
             } LOGPEN, *PLOGPEN, NEAR *NPLOGPEN, FAR *LPLOGPEN;

             此函数对函数1参数进行了封装,意义完成一样;       

         3.  HPEN ExtCreatePen(DWORD dwPenStyle, DWORD dwWidth, const LOGBRUSH* lplb, DWORD dwStyleCount, const DWORD* lpStyle)

              dwPenStyle          --  其线条包括:类型,风格,末端样式,加入等每一组风格只选其一,风格与风格之间通过或“|”关联

                                       线条类型: 

                                             PS_GEOMETRIC    几何画笔
                                             PS_COSMETIC      逻辑画笔

                                        线条风格:

                                             PS_ALTERNATE

                                             PS_SOLD

                                             PS_DASH

                                             PS_DOT

                                             PS_DASHDOT

                                             PS_NULL

                                             PS_USERSTYLE

                                             PS_INSIDEFRAME

                                         末端样式: 

                                              PS_ENDCAP_ROUND

                                             PS_ENDCAP_SQUARE

                                             PS_ENDCAP_FLAT

                                         加入样式:

                                             PS_JOIN_BEVEL

                                             PS_JOIN_MITER

                                            PS_JOIN_ROUND   

              dwWidth              --  线宽,  若dwPenStyle 设有 PS_COSMETIC风格中,此参数只能为1

              lplb                     --  画刷,  若dwPenStyle 设有 PS_COSMETIC风格中, lplb->lbColor 为画笔颜色, lbStyle 必须设为BS_SOILD, 

                                            若dwPenStyle 设有PS_GEOMETRIC风格时,此参数为画刷参数

              dwStyleCount      -- 不作解释 0

              lpStyle                -- 不作解释 NULL

              从名字中可以看出,此函数为函数1的增强函数,它不仅可以实现CreatePen与CreatePenIndirect所有功能,还扩展了它们不支持的功能如:增加了几何画笔, 有了几何画笔可以

             绘制大于宽度1象素的不同线型。几何画笔比CreatePen/CreateIndirect在绘制速度要快。

           

            以下图为线条样式: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME

            {A67EEAAD-43B4-4F65-AEFF-DF99B31E71E6}

          

    二、画笔的使用

         如所有的绘图对象一样,在使用前必须先选入到设备DC中,选入设备DC函数, SelectObject(HDC, HGIDOBJ), 看一下关键代码:


            HPEN hOld = static_cast<HPEN>(SelectObject(hDC, hPen));

            MoveToEx(hDC, rtGrid.left + 10, rtGrid.top + (ii + 1) * nHeight, NULL);
            LineTo(hDC, rtGrid.right - 20, rtGrid.top + (ii + 1) * nHeight);

            SelectObject(hDC, hOld);
            DeleteObject(hPen);

         SelectObject 函数在选入对应的绘图后会返回上一个相同类型的图形对象, 以便恢复原先的绘图对象以及释放被选入的绘图对象并可删除, 对象在使用后要记得删除.

    三、画笔相关函数

         SetDCPenColor  -- Sets the current device context pen color.

         使用此函数前需先将备用画笔DC_PEN选入DC中, SelectObject(hDC, GetStockObject(DC_PEN)) ;

    演示Demo

  • 相关阅读:
    What version of .NET Framework is integrated into what version of OS?
    《千字文》古今第一文,1000字无重复,囊括各个方面的知识!
    这些习惯正在阻碍你的成长(你正在做。。。)
    百家讲坛另附笔记
    百家讲坛之曾国藩笔记
    《挪威的森林》经典语录
    《悲伤逆流成河》台词摘抄
    2018年11月29日,晴
    关于描述的一些感悟
    2018年11月27日, 晴
  • 原文地址:https://www.cnblogs.com/ztercel/p/2120499.html
Copyright © 2020-2023  润新知