|
阅读:2118回复:4
[转帖]MO自定义符号之二(将点显示为水池符号)
这里再讲一个VB下自定义符号的应用实例,那就是将点显示为一个水池,如下图所示。
<P><a href="http://edu.bjenv.com/blog/uploadfile/2005516184544481.jpg" target="_blank" ><IMG src="http://edu.bjenv.com/blog/uploadfile/2005516184544481.jpg" border=0></A></P> <br> <P>罗嗦的话就不说了,直接贴代码:</P> <P>Option Explicit</P> <P>Implements AFCustom.ICustomMarker</P> <P>' data members<BR>Private m_pen As Long<BR>Private m_oldPen As Long<BR>Private m_size As Long<BR>Private m_Style As WsNodeStyle</P> <P>' win32 api functions<BR>Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long<BR>Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long<BR>Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long</P> <P>Private Declare Function LineTo Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long<BR>Private Declare Function MoveToEx Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long<BR>Private Declare Function Ellipse Lib "gdi32" (ByVal hDC As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long</P> <P>Private Sub Class_Initialize()<BR> m_Style = WsWaterTankNode<BR>End Sub</P> <P>Public Property Let SymbolStyle(ByVal vData As WsNodeStyle)<BR> m_Style = vData<BR>End Property</P> <P>Public Property Get SymbolStyle() As WsNodeStyle<BR> SymbolStyle = m_Style<BR>End Property</P> <P>Public Sub ICustomMarker_Draw(ByVal hDC As Long, ByVal x As Long, ByVal y As Long)<BR> Select Case m_Style<BR> Case WsWaterTankNode '水池<BR> MoveToEx hDC, x - m_size, y - m_size, 0<BR> LineTo hDC, x - m_size, y<BR> LineTo hDC, x + m_size, y<BR> LineTo hDC, x + m_size, y - m_size<BR> MoveToEx hDC, x - m_size, Int(y - m_size * 2 / 5), 0<BR> LineTo hDC, x + m_size, Int(y - m_size * 2 / 5)<BR> Case Else<BR> Ellipse hDC, x - m_size, y - m_size, x + m_size, y + m_size<BR> End Select<BR>End Sub</P> <P>Public Sub ICustomMarker_ResetDC(ByVal hDC As Long)<BR> SelectObject hDC, m_oldPen<BR> DeleteObject m_pen<BR>End Sub</P> <P>Public Sub ICustomMarker_SetupDC(ByVal hDC As Long, ByVal dpi As Double, ByVal pBaseSym As Object)<BR> m_pen = CreatePen(0, 1, pBaseSym.Color)<BR> m_oldPen = SelectObject(hDC, m_pen)<BR> m_size = pBaseSym.Size<BR>End Sub</P> |
|
|
|
1楼#
发布于:2006-12-25 22:42
用位图表示时,如果点很多,两三万个,会出现刷新很慢,不知道有什么好的解决方法没有?
|
|
|
2楼#
发布于:2006-12-02 20:56
<P>这个东东不错,顶一下</P>
|
|
|
|
3楼#
发布于:2006-12-02 10:14
这个东西很好,很实用,版主能给点设计思路吗?
|
|
|
4楼#
发布于:2005-08-26 10:34
不错,MO中也有这样的自定义特征符号的例子,但是如果特征点的符号差别变化不大时VB中用位图来表示最方便。
|
|
|