找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4398|回复: 0

ToolBar的模样自己画(四)

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2010-1-30 09:17:32 | 显示全部楼层 |阅读模式

  1. '几个GDI绘图函数功能的封装,有一定通用性,有些是我平时自己就喜欢用的模块。
  2. Private Function NewMyHdc(dHdc As Long, w As Long, h As Long, Optional Bm As Long) As MemHdc
  3.     With NewMyHdc
  4.         .hdc = CreateCompatibleDC(dHdc)
  5.         If Bm = 0 Then
  6.             .Bmp = CreateCompatibleBitmap(dHdc, w, h)
  7.         Else
  8.             .Bmp = Bm
  9.         End If
  10.         .obm = SelectObject(.hdc, .Bmp)
  11.     End With
  12. End Function
  13. Private Function DelMyHdc(MyHdc As MemHdc, Optional nobmp As Boolean) As MemHdc
  14.     With MyHdc
  15.         If .hdc <> 0 Then
  16.             SelectObject .hdc, .obm
  17.             If nobmp = False Then DeleteObject .Bmp
  18.             DeleteDC .hdc
  19.         End If
  20.     End With
  21. End Function
  22. Private Sub DrawPloy3(hdc As Long, rcDrop As RECT, Up As Boolean)
  23.     '画下拉菜单的小三角形
  24. Dim ploy(2) As POINTL
  25. Dim hBrush As Long, hOldBrush As Long
  26. Dim hPen As Long, hOldPen As Long
  27.     With rcDrop
  28.         If Up Then
  29.             .Left = .Left - 1
  30.             .Right = .Right - 1
  31.             .Top = .Top - 1
  32.             .Bottom = .Bottom - 1
  33.             hBrush = CreateSolidBrush(m_lngTextHiColor)
  34.             hPen = CreatePen(PS_SOLID, 1, m_lngTextHiColor)
  35.         Else
  36.             hBrush = CreateSolidBrush(m_lngTextColor)
  37.             hPen = CreatePen(PS_SOLID, 1, m_lngTextColor)
  38.         End If
  39.         hOldPen = SelectObject(hdc, hPen)
  40.         hOldBrush = SelectObject(hdc, hBrush)
  41.         ploy(0).X = (.Left + .Right - 5) \ 2
  42.         ploy(0).Y = (.Top + .Bottom) \ 2
  43.         ploy(1).X = ploy(0).X + 4
  44.         ploy(1).Y = ploy(0).Y
  45.         ploy(2).X = ploy(0).X + 2
  46.         ploy(2).Y = ploy(0).Y + 2
  47.     End With
  48.     Polygon hdc, ploy(0), 3
  49.     SelectObject hdc, hOldPen
  50.     SelectObject hdc, hOldBrush
  51.     DeleteObject hPen
  52.     DeleteObject hBrush
  53. End Sub
  54. Private Sub GetIconSize(hIcon As Long)
  55.     '取得图像列表框图标的大小
  56. Dim Bm As BITMAP, bi As ICONINFO
  57.     GetIconInfo hIcon, bi
  58.     GetObj bi.hbmColor, Len(Bm), Bm
  59.     DeleteObject bi.hbmColor
  60.     DeleteObject bi.hbmMask
  61.     mlngIconWidth = Bm.bmWidth
  62.     mlngIconHeight = Bm.bmHeight
  63. End Sub
  64. Private Sub DrawRect(hdc As Long, rc As RECT, State As Long, Optional IsDrop As Boolean)
  65. Dim hPen As Long
  66.     If (State > 0 Or IsDrop) And m_lngBrdStyle > 3 Then
  67.         hPen = CreatePen(PS_SOLID, 1, m_lngBrdColor)
  68.         If IsDrop Then rc.Left = rc.Left - 1
  69.         FrameRect hdc, rc, hPen
  70.         If IsDrop Then rc.Left = rc.Left + 1
  71.         DeleteObject hPen
  72.         Exit Sub
  73.     End If
  74.     Select Case State
  75.     Case 0    '普通状态
  76.         Select Case m_lngBrdStyle
  77.         Case 1
  78.             If IsDrop Then DrawEdge hdc, rc, BDR_OUTER, BF_RECT Or BF_FLAT
  79.         Case 2
  80.             DrawEdge hdc, rc, BDR_RAISEDOUTER, BF_RECT
  81.         Case 3
  82.             DrawEdge hdc, rc, EDGE_RAISED, BF_RECT
  83.         End Select
  84.     Case 1    '高亮状态
  85.         Select Case m_lngBrdStyle
  86.         Case 0
  87.             DrawEdge hdc, rc, BDR_RAISEDINNER, BF_RECT
  88.         Case 1, 2, 3
  89.             DrawEdge hdc, rc, EDGE_RAISED, BF_RECT
  90.         End Select
  91.     Case 2    '按下状态
  92.         Select Case m_lngBrdStyle
  93.         Case 0
  94.             DrawEdge hdc, rc, BDR_SUNKENOUTER, BF_RECT
  95.         Case 1
  96.             DrawEdge hdc, rc, BDR_SUNKENINNER, BF_RECT
  97.         Case 2, 3
  98.             DrawEdge hdc, rc, EDGE_SUNKEN, BF_RECT
  99.         End Select
  100.     End Select
  101. End Sub


复制代码
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表