我编了一段代码,目的是创建一个画笔,当线宽大于1时,线的端点为方形的:
         HPEN hpen=NULL, holdpen=NULL;
LOGBRUSH lb;
         int LineW = 2;

lineType = PS_COSMETIC | PS_DASHDOT | PS_ENDCAP_SQUARE;

         lb.lbColor = Dd->AttrL->LineC;
lb.lbHatch = 0;
lb.lbStyle = BS_SOLID;
hpen = ExtCreatePen(lineType, LineW, &lb, 0, NULL);当LineW大于1时,创建的画笔就不对,这是为什么?
什么时候用逻辑画笔,什么时候用几何画笔,区别是什么,不加逻辑画笔(PS_GEOMETRIC_和几何画笔(PS_COSMETIC)的参数行不行?

解决方案 »

  1.   

    提错问题了,应该是装饰画笔和几何画笔的区别。几何画笔(PS_GEOMETRIC)和装饰画笔(PS_COSMETIC)
      

  2.   

    HPEN hpen=NULL, holdpen=NULL;
    LOGBRUSH lb;
             int LineW = 2;

    lineType = PS_GEOMETRIC | PS_DASHDOT | PS_ENDCAP_SQUARE | PS_JOIN_MITER;

             lb.lbColor = Dd->AttrL->LineC;
    lb.lbHatch = 0;
    lb.lbStyle = BS_SOLID;
    hpen = ExtCreatePen(lineType, LineW, &lb, 0, NULL);
      

  3.   

    用::ExtCreatePen建立画笔,如果是虚线(PS_DASHDOT),在线宽为1和大于1两种情况下,效果有差.
    解决办法是,增加属性:lineType |= PS_USERSTYLE;
    hPen = ::ExtCreatePen( lLinePattern | PS_USERSTYLE, m_lStrokeWidth,  &lbrush, ulStyleCount, m_ulStyle);
    自己定义DASH,DASHDOT等非SOLID线型.
      

  4.   

    自定义线性的例子没试出来,是
         lineType = PS_GEOMETRIC | PS_USERSTYLE | PS_ENDCAP_SQUARE | PS_JOIN_MITER;
         BitReplace(lpStyle,0,7,8);
         BitReplace(lpStyle,8,15,8);
         hpen = ExtCreatePen(lineType, m_LineW, &lb, 1,&lpStyle);
    吗?
    其中,BitReplace()是自定义函数,将0-7位置为8,8-15位置为8