zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    JavaSE 基础 第51节 定义自己的异常
    JavaSE 基础 第50节 Java中的异常链
    JavaSE 基础 第49节 手动抛出异常
    JavaSE 基础 第48节 Java中的异常声明
    JavaSE 基础 第47节 获取异常信息
    JavaSE 基础 第46节 异常的分类
    JavaSE 基础 第45节Java异常快速入门
    JavaSE 基础 第44节 引用外部类的对象
    JavaSE 基础 第43节 静态内部类
    通用爬虫
  • 原文地址:https://www.cnblogs.com/ztercel/p/2120499.html
Copyright © 2011-2022 走看看