我编了一段代码,目的是创建一个画笔,当线宽大于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)的参数行不行?
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)的参数行不行?
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);
解决办法是,增加属性:lineType |= PS_USERSTYLE;
hPen = ::ExtCreatePen( lLinePattern | PS_USERSTYLE, m_lStrokeWidth, &lbrush, ulStyleCount, m_ulStyle);
自己定义DASH,DASHDOT等非SOLID线型.
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