?? uclayersymbol.ctl
字號:
Set m_pStyleGallery = Nothing
Exit Function
End If
'判斷文件中是否有我們需要的標注符號
Dim pStyleGalleryClass As IStyleGalleryClass
Dim strClassName As String
For i = 0 To m_pStyleGallery.ClassCount - 1
Set pStyleGalleryClass = m_pStyleGallery.Class(i)
strClassName = pStyleGalleryClass.Name
'設置相應標志
If strClassName = "Fill Symbols" Then m_bHasFillSymbolInFile = True
If strClassName = "Line Symbols" Then m_bHasLineSymbolInFile = True
If strClassName = "Marker Symbols" Then m_bHasMarkerSymbolInFile = True
Next i
'很不辛,符號庫中沒有任何我們需要的標注符號(目前只需要點線面符號)
If m_bHasFillSymbolInFile = False And m_bHasLineSymbolInFile = False And m_bHasMarkerSymbolInFile = False Then
CatchErrors ErrorNoSymbols
LoadSymbolsFromFiles = False
Set m_pStyleGallery = Nothing
Exit Function
End If
LoadSymbolsFromFiles = True
End Function
'更新靜態顯示界面
Private Sub UpdateStaticDisplaying()
'設置符號庫
If m_bChangStyleFile = False Then
'搜索默認符號庫文件
GetStyleFile
Else
Dim str As String
str = cmbSymbolFiles.ListIndex
End If
'設置符號類型
If m_enumSymbolGeometryType = esriGeometryNull Then
SetGeoTypeComoboxOnNoGeometryType 'm_intGeometryType屬性未傳入
Else
SetGeoTypeComoboxOnHasGeometryType 'm_intGeometryType屬性已傳入
End If
End Sub
'更新動態顯示界面
Private Sub UpdateDynamicDisplaying()
'控件啟動時,如果輸入的符號參數不為空,則在預覽窗口顯示輸入的符號
If m_bControlStart = True Then
If Not m_pInputSymbol Is Nothing Then
'預覽符號
Dim bResult As Boolean
bResult = DrawToDC(picPreview.hdc, picPreview.ScaleWidth, picPreview.ScaleHeight, m_pInputSymbol, 2)
If bResult = False Then CatchErrors ErrorPreview
picPreview.Refresh
'設置下拉框,線形尺寸,顏色
If TypeOf m_pInputSymbol Is IFillSymbol Then
cmbGeometryType.ListIndex = 0
ElseIf TypeOf m_pInputSymbol Is ILineSymbol Then
cmbGeometryType.ListIndex = 1
ElseIf TypeOf m_pInputSymbol Is IMarkerSymbol Then
cmbGeometryType.ListIndex = 2
End If
End If
End If
'設定顯示界面(根據符號(點、線、面))
If cmbGeometryType.List(cmbGeometryType.ListIndex) = "面符號" Then
fraPolygon.Visible = True
fraLineAndPoint.Visible = False
m_strShapeType = "Fill Symbols"
End If
If cmbGeometryType.List(cmbGeometryType.ListIndex) = "線符號" Then
fraPolygon.Visible = False
fraLineAndPoint.Visible = True
m_strShapeType = "Line Symbols"
lblSizeCaption.Caption = "線寬:"
End If
If cmbGeometryType.List(cmbGeometryType.ListIndex) = "點符號" Then
fraPolygon.Visible = False
fraLineAndPoint.Visible = True
m_strShapeType = "Marker Symbols"
lblSizeCaption.Caption = "尺寸:"
End If
'更新垂直滾動條基本屬性值
UpdateHScrollBar
'設定符號顯示(顯示到列表框)
DisplaySymbols
'顯示輸入符號的屬性
If m_bControlStart = True Then DisplaySymbolProp
End Sub
'更新垂直滾動條
Private Sub UpdateHScrollBar()
'設定垂直滾動條
If m_intTotalSymbolsNum = -1 Then
'統計符號庫中該類型符號個數
m_intTotalSymbolsNum = GetStyleItemsCount
'個數小于 9
If m_intTotalSymbolsNum < 10 Then
'此標注目的:修改最大最小值后,禁止執行滾動條的Chang函數
m_bResetHscrollBar = False
vsbSymbol.Max = 100
vsbSymbol.Value = 100
vsbSymbol.Min = 100
m_bResetHscrollBar = True
Exit Sub
End If
'計算垂直滾動條最小步長
Dim intTemp As Integer
If m_intTotalSymbolsNum Mod 3 <> 0 Then
intTemp = Int(m_intTotalSymbolsNum / 3) + 1
Else
intTemp = m_intTotalSymbolsNum / 3
End If
intTemp = intTemp - 3
vsbSymbol.Max = intTemp
vsbSymbol.SmallChange = 1
vsbSymbol.LargeChange = 2
vsbSymbol.Min = 0
vsbSymbol.Value = 0
vsbSymbol.Refresh
End If
End Sub
'設置符號類型(m_intGeometryType屬性已傳入)
Private Sub SetGeoTypeComoboxOnHasGeometryType()
'目前只有這三種選擇,動態加載???
If m_bChangStyleFile = False Then
cmbGeometryType.Clear
cmbGeometryType.AddItem "面符號"
cmbGeometryType.AddItem "線符號"
cmbGeometryType.AddItem "點符號"
Else
m_bChangStyleFile = False
End If
Dim i As Integer
i = 0
'點符號
If m_enumSymbolGeometryType = esriGeometryPoint Then
If m_bHasMarkerSymbolInFile = True Then
For i = 0 To cmbGeometryType.ListCount - 1
If cmbGeometryType.List(i) = "點符號" Then
'初始化“符號類型”下拉框為“點圖層”
cmbGeometryType.ListIndex = i
Exit For
End If
Next i
End If
Debug.Assert Not i = cmbGeometryType.ListCount
If i = cmbGeometryType.ListCount Then Exit Sub
' If i = cmbGeometryType.ListCount Then
' m_enumErrorOnLoadSymbol = ErrorNoMatchedSymbol
' Exit Sub
' End If
End If
'面符號
If m_enumSymbolGeometryType = esriGeometryPolygon Or m_enumSymbolGeometryType = esriGeometryEnvelope Then
If m_bHasFillSymbolInFile = True Then
For i = 0 To cmbGeometryType.ListCount - 1
If cmbGeometryType.List(i) = "面符號" Then
'初始化“圖層類型”下拉框為“面圖層”
cmbGeometryType.ListIndex = i
Exit For
End If
Next i
Debug.Assert Not i = cmbGeometryType.ListCount
If i = cmbGeometryType.ListCount Then Exit Sub
' If i = cmbGeometryType.ListCount Then
' m_enumErrorOnLoadSymbol = ErrorNoMatchedSymbol
' Exit Sub
' End If
End If
End If
'線符號
If m_enumSymbolGeometryType = esriGeometryPolyline Or m_enumSymbolGeometryType = esriGeometryLine Then
If m_bHasLineSymbolInFile = True Then
For i = 0 To cmbGeometryType.ListCount - 1
If cmbGeometryType.List(i) = "線符號" Then
'初始化“圖層類型”下拉框為“線圖層”
cmbGeometryType.ListIndex = i
Exit For
End If
Next i
Debug.Assert Not i = cmbGeometryType.ListCount
If i = cmbGeometryType.ListCount Then Exit Sub
' If i = cmbGeometryType.ListCount Then
' m_enumErrorOnLoadSymbol = ErrorNoMatchedSymbol
' Exit Sub
' End If
End If
End If
End Sub
'設置符號類型(m_intGeometryType屬性未傳入)
Private Sub SetGeoTypeComoboxOnNoGeometryType()
'目前只有這三種選擇,動態加載???
If m_bChangStyleFile = False Then
cmbGeometryType.Clear
cmbGeometryType.AddItem "面符號"
cmbGeometryType.AddItem "線符號"
cmbGeometryType.AddItem "點符號"
Else
m_bChangStyleFile = False
End If
Dim i As Integer
i = 0
'面標住符號為默認值
If m_bHasFillSymbolInFile = True Then
For i = 0 To cmbGeometryType.ListCount - 1
If cmbGeometryType.List(i) = "面符號" Then
'初始化“圖層類型”下拉框為“面圖層”
cmbGeometryType.ListIndex = i
GoTo Down
End If
Next i
End If
'線標住符號為”默認值
If m_bHasLineSymbolInFile = True Then
For i = 0 To cmbGeometryType.ListCount - 1
If cmbGeometryType.List(i) = "線符號" Then
'初始化“圖層類型”下拉框為“線圖層”
cmbGeometryType.ListIndex = i
GoTo Down
End If
Next i
End If
'點標住符號為默認值
If m_bHasMarkerSymbolInFile = True Then
For i = 0 To cmbGeometryType.ListCount - 1
If UCase(cmbGeometryType.List(i)) = "點符號" Then
'初始化“圖層類型”下拉框為“點圖層”
cmbGeometryType.ListIndex = i
GoTo Down
End If
Next i
End If
Down:
End Sub
'重新選擇標注類型(點標注、線標注、面標注)
Private Sub cmbGeometryType_click()
'控件剛顯示時,不執行該過程
If m_bControlStart = True Then Exit Sub
'初始化符號個數
m_intTotalSymbolsNum = -1
'復位滾動條
UpdateHScrollBar
'更新動態顯示界面
UpdateDynamicDisplaying
End Sub
'釋放內存
Private Sub UserControl_Terminate()
Set m_pStyleGallery = Nothing
End Sub
'滾動顯示符號
Private Sub vsbSymbol_Change()
'當重新設置滾動條
If m_bResetHscrollBar = False Then Exit Sub
'顯示符號
If Not m_pStyleGallery Is Nothing Then
DisplaySymbols
Dim i As Integer
For i = 0 To m_intCurDisplayingSymbolsNum - 1
picShowSymbol(i).Refresh
Next i
End If
End Sub
'統計當前符號庫中指定類型符號的符號個數
Private Function GetStyleItemsCount() As Integer
Dim i As Integer
Dim pEnumStyleGalleryItem As IEnumStyleGalleryItem
Dim pStyleGalleryItem As IStyleGalleryItem
Dim strStylePathName As String
i = 0
Dim strStyleClass As String
strStyleClass = cmbGeometryType.List(cmbGeometryType.ListIndex)
'確定符號類型
Select Case strStyleClass
Case "面符號"
Set pEnumStyleGalleryItem = m_pStyleGallery.Items("Fill Symbols", m_pStylePath, "")
'不能打開符號庫文件
If pEnumStyleGalleryItem Is Nothing Then
CatchErrors ErrirCanntLoadStyleFile
Exit Function
End If
Set pStyleGalleryItem = pEnumStyleGalleryItem.Next
'符號庫文件已經損壞
If pStyleGalleryItem Is Nothing Then
CatchErrors ErrorBadStyleFile
Exit Function
End If
Do While Not pStyleGalleryItem Is Nothing
If TypeOf pStyleGalleryItem.Item Is IFillSymbol Then
i = i + 1
End If
Set pStyleGalleryItem = pEnumStyleGalleryItem.Next
Loop
Case "線符號"
Set pEnumStyleGalleryItem = m_pStyleGallery.Items("Line Symbols", m_pStylePath, "")
'不能打開符號庫文件
If pEnumStyleGalleryItem Is Nothing Then
CatchErrors ErrirCanntLoadStyleFile
Exit Function
End If
Set pStyleGalleryItem = pEnumStyleGalleryItem.Next
'符號庫文件已經損壞
If pStyleGalleryItem Is Nothing Then
CatchErrors ErrorBadStyleFile
Exit Function
End If
Do While Not pStyleGalleryItem Is Nothing
If TypeOf pStyleGalleryItem.Item Is ILineSymbol Then
i = i + 1
End If
Set pStyleGalleryItem = pEnumStyleGalleryItem.Next
Loop
Case "點符號"
Set pEnumStyleGalleryItem = m_pStyleGallery.Items("Marker Symbols", m_pStylePath, "")
'不能打開符號庫文件
If pEnumStyleGalleryItem Is Nothing Then
CatchErrors ErrirCanntLoadStyleFile
Exit Function
End If
Set pStyleGalleryItem = pEnumStyleGalleryItem.Next
'符號庫文件已經損壞
If pStyleGalleryItem Is Nothing Then
CatchErrors ErrorBadStyleFile
Exit Function
End If
Do While Not pStyleGalleryItem Is Nothing
If TypeOf pStyleGalleryItem.Item Is IMarkerSymbol Then
i = i + 1
End If
Set pStyleGalleryItem = pEnumStyleGalleryItem.Next
Loop
End Select
GetStyleItemsCount = i
End Function
'顯示符號
Private Sub DisplaySymbols()
'計算第一個可見符號索引
CalculateLTSymbolID
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -