如何绘制线宽值大于1的虚线或点划线?(50分)

  • 主题发起人 主题发起人 aizb
  • 开始时间 开始时间
A

aizb

Unregistered / Unconfirmed
GUEST, unregistred user!
根据MSDN中关于CreatePen函数的说明,当Pen.style线型不是psSolid和psInsideFrame时,
线宽PenWidth值必须是1。也就是说当线宽大于1时,线型值无效。如何绘制线宽值大于1的虚线或点划线?
 
没有直接的方法,只有自己定义了
 
如何自己定义?
 
呵,自己写个过程慢慢画吧!
 
倒!请教这个过程怎么写?不会去描每个点吧!
 
const
PenStyles: array[TPenStyle] of DWORD = (PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME);

procedure TForm1.Button1Click(Sender: TObject);
var
tb: tagLOGBRUSH;
lbr: tagLOGBRUSH;
NewH, OldH: HGDIOBJ;

procedure SetPS(b: TPenStyle; aColor: TColor; w: integer);
begin
tb.lbStyle := BS_SOLID;
tb.lbColor := aColor;
NewH := ExtCreatePen(PS_GEOMETRIC + PS_ENDCAP_SQUARE + PenStyles, w, tb, 0, nil);
OldH := SelectObject(Canvas.Handle, NewH);
end;

begin
SetPS(psDash, clRed, 10);
MoveToEx(Canvas.Handle, 0, 100, nil);
LineTo(Canvas.Handle, 300, 100);
SelectObject(Canvas.Handle, OldH);
DeleteObject(NewH);
end;
 
真的可以呀!那MSDN...哦,MSDN说的是CreatePen,原来得用ExtCreatePen,
不过昨晚看看过MSDN说ExtCreatePen也是一样哦!原来MSDN也不不正确的时候!
 
给分给分,感谢感谢!
 
后退
顶部