让文字随形状同步缩放
不管是设计窗口还是显示窗口,当我们用鼠标滚轮缩放流程图的时候,所有形状都会一起缩放,但形状的文字却不会同步缩放。
如果要文字也同步缩放,在两个窗口的Map控件的OwerDrawMark事件代码的最后面,找到绘制文字的代码:
If
dr.IsNull("文本")
=
False
Then
Dim
fnt
As
New
Font("微软雅黑",
12)
Dim
fmt
As
New
StringFormat()
fmt.Alignment = StringAlignment.Center
fmt.LineAlignment = StringAlignment.Center
If
dr.IsNull("字体颜色")
=
False
Then
brush =
New
solidBrush(color.FromArgb(dr("字体颜色")))
Else
brush =
New
solidbrush(color.Black)
End
If
If
dr.IsNull("字体")
=
False
Then
Dim
converter
As
New
FontConverter()
fnt = converter.ConvertFromString(dr("字体"))
End
If
e.Graphics.DrawString(dr("文本"),
fnt, brush, rect, fmt)
End
If
假定初始缩放指数为12(只是碰巧和默认字号12相同,别多想),如果你希望文字也能同步缩放,可将这段代码改为:
Dim
fnt
As
New
Font("微软雅黑",
12)
Dim
fmt
As
New
StringFormat()
fmt.Alignment = StringAlignment.Center
fmt.LineAlignment = StringAlignment.Center
If
dr.IsNull("字体颜色")
=
False
Then
brush =
New
solidBrush(color.FromArgb(dr("字体颜色")))
Else
brush =
New
solidbrush(color.Black)
End
If
If
dr.IsNull("字体")
=
False
Then
Dim
converter
As
New
FontConverter()
fnt = converter.ConvertFromString(dr("字体"))
End
If
Dim
defaultZoom
As
Double
= 12
'这个值要和AfterLoad事件中设置的Zoom值相同
Dim
currentZoom
As
Double
= e.Form.Controls("Map1").GeoMap.Zoom
Dim
fntSize
As
Single
= fnt.Size * 2 ^ currentZoom / 2 ^ defaultZoom
If
fntSize <> fnt.Size
Then
fnt =
New
Font(fnt.Name, fntsize, fnt.Style)
End
If
e.Graphics.DrawString(dr("文本"),
fnt, brush, rect, fmt)
提示:
上述代码能实现形状文字的自动缩放,但是纯文字对象还是不会自动缩放的。
如果你希望纯文字对象也能自动缩放,可以删除该文字对象,然后插入一个矩形,将矩形的背景颜色设置为透明,并去掉矩形的边框,最后双击矩形设置文字即可。