阿杰 发表于 2010-1-30 09:21:55

ToolBar的模样自己画(三)


'类中的各种属性与方法,主要用于外部调用
Property Let BorderColor(ByVal vData As Long)
    If m_lngBrdColor <> vData Then
      m_lngBrdColor = vData
      If m_lngBrdStyle > 3 Then Refresh
    End If
End Property
Property Get BorderColor() As Long
    BorderColor = m_lngBrdColor
End Property
Property Let BackPicture(ByVal vData As String)
    If vData <> "" And Dir(vData) <> "" Then
      If LCase(m_strBkPicture) <> LCase(vData) Then
            m_strBkPicture = vData
            Set mpicBk = LoadPicture(m_strBkPicture)
            Refresh
      End If
    Else
      Set mpicBk = Nothing
      m_strBkPicture = ""
    End If
End Property
Property Get BackPicture() As String
    BackPicture = m_strBkPicture
End Property
Property Let FontName(ByVal vData As String)
Dim s As String, i As Long
    vData = Trim(vData)
    s = StrConv(Font.lfFaceName, vbUnicode)
    i = InStr(1, s, Chr(0))
    If i > 0 Then
      s = Left$(s, i - 1)
    End If
    If s <> vData Then
      CopyMemory Font.lfFaceName(0), ByVal vData, lstrlen(vData)
      Refresh
    End If
End Property
Property Get FontName() As String
Dim s As String, i As Long
    s = StrConv(Font.lfFaceName, vbUnicode)
    i = InStr(1, s, Chr(0) - 1)
    If i > 0 Then
      FontName = Left$(s, i - 1)
    Else
      FontName = s
    End If
End Property
Property Let FontUnderline(ByVal vData As Boolean)
Dim i As Long
    i = IIf(vData, 1, 0)
    If Font.lfUnderline <> i Then
      Font.lfUnderline = i
      Refresh
    End If
End Property
Property Get FontUnderline() As Boolean
    FontUnderline = (Font.lfUnderline = 1)
End Property
Property Let FontItalic(ByVal vData As Boolean)
Dim i As Long
    i = IIf(vData, 1, 0)
    If Font.lfItalic <> i Then
      Font.lfItalic = i
      Refresh
    End If
End Property
Property Get FontItalic() As Boolean
    FontItalic = (Font.lfItalic = 1)
End Property
Property Let FontBold(ByVal vData As Boolean)
Dim i As Long
    i = IIf(vData, 700, 400)
    If Font.lfWeight <> i Then
      Font.lfWeight = i
      Refresh
    End If
End Property
Property Get FontBold() As Boolean
    FontBold = (Font.lfWeight = 700)
End Property
Property Let FontSize(ByVal vData As Long)
    If Font.lfHeight <> vData And vData >= 7 And vData <= 16 Then
      Font.lfHeight = vData
      Font.lfWidth = 0
      Refresh
    End If
End Property
Property Get FontSize() As Long
    FontSize = Font.lfHeight
End Property
Property Let BorderStyle(ByVal vData As Long)
    If m_lngBrdStyle <> vData Then
      m_lngBrdStyle = vData
      Refresh
    End If
End Property
Property Get BorderStyle() As Long
    BorderStyle = m_lngBrdStyle
End Property
Property Let TextHiColor(ByVal vData As Long)
    m_lngTextHiColor = vData
End Property
Property Get TextHiColor() As Long
    TextHiColor = m_lngTextHiColor
End Property
Property Let TextColor(ByVal vData As Long)
    If m_lngTextColor <> vData Then
      m_lngTextColor = vData
      Refresh
    End If
End Property
Property Get TextColor() As Long
    TextColor = m_lngTextColor
End Property
Property Let BackColor(ByVal vData As Long)
    If m_lngBackColor <> vData Then
      m_lngBackColor = vData
      If mpicBk Is Nothing Then Refresh
    End If
End Property
Property Get BackColor() As Long
    BackColor = m_lngBackColor
End Property
Sub BindToolBar(ByVal hWnd As Long)
    If m_hWnd = 0 Then
      m_hWnd = hWnd
      If m_hWnd Then
            OldWindowProc = GetWindowLong(m_hWnd, GWL_WNDPROC)
            SetWindowLong m_hWnd, GWL_WNDPROC, AddressOf TBSubClass
      End If
      Refresh
    End If
End Sub
Private Sub Class_Initialize()
Dim rc As RECT, hBrush As Long, i As Long
    m_lngTextColor = vbBlack
    m_lngTextHiColor = vbRed
    m_lngBackColor = &HD7E9EB
    m_lngBrdColor = &H0
    mlngBtnHiAlpha = 96
    mlngBtnDownAlpha = 192
    rc.Bottom = 128
    rc.Right = 128
    i = GetDC(0)
    mdcWhite = NewMyHdc(i, rc.Right, rc.Bottom)
    ReleaseDC 0, i
    hBrush = CreateSolidBrush(vbWhite)
    FillRect mdcWhite.hdc, rc, hBrush
    DeleteObject hBrush
    With Font
      .lfCharSet = 1
      .lfHeight = 12
      .lfWeight = 400
    End With
End Sub
Private Sub Class_Terminate()
    SetWindowLong m_hWnd, GWL_WNDPROC, OldWindowProc
    mdcWhite = DelMyHdc(mdcWhite)
    Set mpicBk = Nothing
End Sub
Sub Refresh()
Dim rc As RECT
    If m_hWnd <> 0 Then
      ShowWindow m_hWnd, 0
      ShowWindow m_hWnd, 5
    End If
End Sub

页: [1]
查看完整版本: ToolBar的模样自己画(三)