c++点滴

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用ExtCreatePen创建装饰性画笔

dwPenStyle:为画笔类型和型式(类型包括PS_COSMETIC和PS_GEOMETRIC,PS_COSMETIC为装饰画笔,PS_GEOMETRIC为几何画笔,型式包括前面说的画笔的样式PS_SOLID....,在2000/nt以上还包括PS_USERSTYLE、PS_ALTERNATE)。

 

dwWidth:装饰性画笔只能画单个象素宽的线,因此dwWidth参数只能为1;

lplb:画笔的属性;

dwStyleCont:是自定义样式数组的个数。

lpStyle:自定义样式数组

    LOGBRUSH lb;
    HDC hdc 
= ::GetDC(this->m_hWnd);
    HGDIOBJ hOld;
    
    lb.lbStyle 
= BS_SOLID; 
    lb.lbColor 
= RGB(255,0,0); 
    lb.lbHatch 
= 0
    HPEN p 
= ExtCreatePen(PS_COSMETIC | PS_SOLID,1&lb, 0,NULL); 
    hOld 
= SelectObject(hdc,p);
    MoveToEx(hdc,
0,20,NULL);
    LineTo(hdc,
100,20);
    SelectObject(hdc,hOld);
    DeleteObject(p);
    ::ReleaseDC(
this->m_hWnd,hdc);

下面使用PS_USERSTYLE来创建自定义的装饰性画笔,lpSyle数组中的第一个元素象素长度,第二个元素为间距长度,第三个元素为象素长度......,里面元素的单位为三个象素,例如{4,3,2,1}则绘出的线为12个象素的线,9象素的间距,6象素的线,3象素的间距。

    LOGBRUSH lb;
    HDC hdc 
= ::GetDC(this->m_hWnd);
    HGDIOBJ hOld;
    DWORD cy[
4= {4,3,2,1};
    
    lb.lbStyle 
= BS_SOLID; 
    lb.lbColor 
= RGB(255,0,0); 
    lb.lbHatch 
= 0
    HPEN p 
= ExtCreatePen(PS_COSMETIC | PS_USERSTYLE,1&lb, 4, cy);  
    hOld 
= SelectObject(hdc,p);
    MoveToEx(hdc,
0,20,NULL);
    LineTo(hdc,
100,20);
    SelectObject(hdc,hOld);
    DeleteObject(p);
    ::ReleaseDC(
this->m_hWnd,hdc);

使用ExtCreatePen建立几何画笔

 

    LOGBRUSH lb;
    HDC hdc 
= ::GetDC(this->m_hWnd);
    HGDIOBJ hOld;
    DWORD cy[
4= {4,3,2,1};
    
    lb.lbStyle 
= BS_SOLID;
    lb.lbColor 
= RGB(255,0,0); 
    lb.lbHatch 
= 0
        
//创建一个平面端点几何画笔(PS_ENDCAP_FLAT平面端点,PS_ENDCAP_ROUND圆角端点)
    HPEN p = ExtCreatePen(PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_FLAT,16&lb, 0, NULL);  
    hOld 
= SelectObject(hdc,p);
    MoveToEx(hdc,
0,20,NULL);
    LineTo(hdc,
100,20);
    SelectObject(hdc,hOld);
    DeleteObject(p);
    ::ReleaseDC(
this->m_hWnd,hdc);

 

 

posted on 2009-02-01 18:46  Reunion  阅读(832)  评论(0)    收藏  举报