www.pudn.com > VBkongjian.rar > GDI.bas


Attribute VB_Name = "basGDI" 
Option Explicit 
DefInt A-Z 
 
Type RECT 
 Left       As Long 
 Top        As Long 
 Right      As Long 
 Bottom     As Long 
End Type 
 
Type POINTAPI 
 X As Long 
 Y As Long 
End Type 
 
Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long 
Declare Function CreatePen& Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) 
Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long 
Declare Function DeleteObject& Lib "gdi32" (ByVal hObject As Long) 
Declare Function DrawEdge Lib "user32" (ByVal hDC As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Boolean 
Declare Function DrawFocusRect& Lib "user32" (ByVal hDC As Long, lpRect As RECT) 
Declare Function DrawFrameControl Lib "user32" (ByVal hDC&, lpRect As RECT, ByVal un1 As Long, ByVal un2 As Long) As Boolean 
Declare Function DrawText& Lib "user32" Alias "DrawTextA" (ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) 
Declare Function FillRect& Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) 
Declare Function GetBkColor& Lib "gdi32" (ByVal hDC As Long) 
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long 
Declare Function GetTextColor& Lib "gdi32" (ByVal hDC As Long) 
Declare Function LineTo& Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) 
Declare Function MoveToEx& Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) 
Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long 
Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, lColorRef As Long) As Long 
Declare Function SelectObject& Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) 
Declare Function SetTextColor& Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) 
Declare Function SetTextJustification Lib "gdi32" (ByVal hDC As Long, ByVal nBreakExtra As Long, ByVal nBreakCount As Long) As Long 
Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long 
Declare Function UpdateWindow& Lib "user32" (ByVal hWnd As Long) 
 
'  flags for DrawFrameControl 
Public Const DFC_CAPTION = 1 'Title bar 
Public Const DFC_MENU = 2   'Menu 
Public Const DFC_SCROLL = 3 'Scroll bar 
Public Const DFC_BUTTON = 4 'Standard button 
 
Public Const DFCS_CAPTIONCLOSE = &H0    'Close button 
Public Const DFCS_CAPTIONMIN = &H1 'Minimize button 
Public Const DFCS_CAPTIONMAX = &H2 'Maximize button 
Public Const DFCS_CAPTIONRESTORE = &H3  'Restore button 
Public Const DFCS_CAPTIONHELP = &H4     'Windows 95 only: Help button 
 
Public Const DFCS_MENUARROW = &H0 'Submenu arrow 
Public Const DFCS_MENUCHECK = &H1 'Check mark 
Public Const DFCS_MENUBULLET = &H2 'Bullet 
Public Const DFCS_MENUARROWRIGHT = &H4 
 
Public Const DFCS_SCROLLUP = &H0   'Up arrow of scroll bar 
Public Const DFCS_SCROLLDOWN = &H1 'Down arrow of scroll bar 
Public Const DFCS_SCROLLLEFT = &H2 'Left arrow of scroll bar 
Public Const DFCS_SCROLLRIGHT = &H3 'Right arrow of scroll bar 
 
Public Const DFCS_SCROLLCOMBOBOX = &H5   'Combo box scroll bar 
Public Const DFCS_SCROLLSIZEGRIP = &H8   'Size grip 
Public Const DFCS_SCROLLSIZEGRIPRIGHT = &H10   'Size grip in bottom-right corner of window 
 
Public Const DFCS_BUTTONCHECK = &H0 'Check box 
Public Const DFCS_BUTTONRADIO = &H4 'Radio button 
Public Const DFCS_BUTTON3STATE = &H8 'Three-state button 
Public Const DFCS_BUTTONPUSH = &H10 'Push button 
Public Const DFCS_INACTIVE = &H100 'Button is inactive (grayed) 
Public Const DFCS_PUSHED = &H200  'Button is pushed 
Public Const DFCS_CHECKED = &H400 'Button is checked 
Public Const DFCS_ADJUSTRECT = &H2000   'Bounding rectangle is adjusted to exclude the surrounding edge of the push button 
Public Const DFCS_FLAT = &H4000   'Button has a flat border 
Public Const DFCS_MONO = &H8000   'Button has a monochrome border 
 
Public Const BDR_RAISEDOUTER = &H1 
Public Const BDR_SUNKENOUTER = &H2 
Public Const BDR_RAISEDINNER = &H4 
Public Const BDR_SUNKENINNER = &H8 
Public Const BDR_OUTER = &H3 
Public Const BDR_INNER = &HC 
Public Const BDR_RAISED = &H5 
Public Const BDR_SUNKEN = &HA 
 
Public Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER) 
Public Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER) 
Public Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER) 
Public Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER) 
 
Public Const BF_LEFT = &H1 
Public Const BF_TOP = &H2 
Public Const BF_RIGHT = &H4 
Public Const BF_BOTTOM = &H8 
Public Const BF_TOPLEFT = (BF_TOP Or BF_LEFT) 
Public Const BF_TOPRIGHT = (BF_TOP Or BF_RIGHT) 
Public Const BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT) 
Public Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT) 
Public Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM) 
Public Const BF_DIAGONAL = &H10 
 
' For diagonal lines, the BF_RECT flags specify the end point of 
' the vector bounded by the rectangle parameter. 
Public Const BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL Or BF_TOP Or BF_RIGHT) 
Public Const BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL Or BF_TOP Or BF_LEFT) 
Public Const BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT) 
Public Const BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT) 
 
Public Const BF_MIDDLE = &H800    ' Fill in the middle. 
Public Const BF_SOFT = &H1000     ' Use for softer buttons. 
Public Const BF_ADJUST = &H2000   ' Calculate the space left over. 
Public Const BF_FLAT = &H4000     ' For flat rather than 3-D borders. 
Public Const BF_MONO = &H8000     ' For monochrome borders. 
 
'DrawText Constants 
Public Const DT_BOTTOM = &H8 
Public Const DT_CALCRECT = &H400 
Public Const DT_CENTER = &H1 
Public Const DT_LEFT = &H0 
Public Const DT_NOCLIP = &H100 
Public Const DT_NOPREFIX = &H800 
Public Const DT_RIGHT = &H2 
Public Const DT_SINGLELINE = &H20 
Public Const DT_TOP = &H0 
Public Const DT_VCENTER = &H4 
Public Const DT_WORDBREAK = &H10 
 
Public PT As POINTAPI 
Public Sub DrawCtlEdge(hDC As Long, X As Single, Y As Single, W As Single, H As Single, Optional Style As Long = EDGE_RAISED, Optional Flags As Long = BF_RECT) 
 Dim R As RECT 
 With R 
  .Left = X 
  .Top = Y 
  .Right = X + W 
  .Bottom = Y + H 
 End With 
 DrawEdge hDC, R, Style, Flags 
End Sub 
 
Public Function DrawControl(ByVal hDC As Long, ByVal X As Single, ByVal Y As Single, ByVal W As Single, ByVal H As Single, ByVal CtlType As Long, ByVal Flags As Long) 
 Dim R As RECT 
 With R 
  .Left = X 
  .Top = Y 
  .Right = X + W 
  .Bottom = Y + H 
 End With 
 DrawControl = DrawFrameControl(hDC, R, CtlType, Flags) 
End Function 
 
Function TranslateColor(ByVal clr As OLE_COLOR, Optional hPal As Long = 0) As Long 
 If OleTranslateColor(clr, hPal, TranslateColor) Then TranslateColor = -1 
End Function 
Public Function LineDC(ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, Optional Color As OLE_COLOR = -1) As Long 
 Dim hPen As Long, hPenOld As Long 
 Dim R 
 hPen = CreatePen(0, 1, IIf(Color = -1, GetTextColor(hDC), TranslateColor(Color))) 
 hPenOld = SelectObject(hDC, hPen) 
 MoveToEx hDC, X1, Y1, PT 
 LineDC = LineTo(hDC, X2, Y2) 
 SelectObject hDC, hPenOld 
 DeleteObject hPen 
 DeleteObject hPenOld 
End Function 
 
Public Sub Box3DDC(ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal W As Long, ByVal H As Long, Optional Highlight As OLE_COLOR = vb3DHighlight, Optional Shadow As OLE_COLOR = vb3DShadow, Optional Fill As OLE_COLOR = -1) 
 Dim hPen As Long, hPenOld As Long 
 'Fill 
 If Fill <> -1 Then BoxSolidDC hDC, X, Y, W, H, Fill 
 'Highlight 
 hPen = CreatePen(0, 1, TranslateColor(Highlight)) 
 hPenOld = SelectObject(hDC, hPen) 
 MoveToEx hDC, X + W - 1, Y, PT 
 LineTo hDC, X, Y 
 LineTo hDC, X, Y + H - 1 
 SelectObject hDC, hPenOld 
 DeleteObject hPen 
 DeleteObject hPenOld 
 'Shadow 
 hPen = CreatePen(0, 1, TranslateColor(Shadow)) 
 hPenOld = SelectObject(hDC, hPen) 
 LineTo hDC, X + W - 1, Y + H - 1 
 LineTo hDC, X + W - 1, Y 
 SelectObject hDC, hPenOld 
 DeleteObject hPen 
 DeleteObject hPenOld 
End Sub 
Public Sub BoxDC(ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal W As Long, ByVal H As Long, Optional Color As OLE_COLOR = vbButtonFace, Optional Fill As OLE_COLOR = -1) 
 Dim hPen As Long, hPenOld As Long 
 'Fill 
 If Fill <> -1 Then BoxSolidDC hDC, X, Y, W, H, Fill 
 'Box 
 hPen = CreatePen(0, 1, TranslateColor(Color)) 
 hPenOld = SelectObject(hDC, hPen) 
 MoveToEx hDC, X + W - 1, Y, PT 
 LineTo hDC, X, Y 
 LineTo hDC, X, Y + H - 1 
 LineTo hDC, X + W - 1, Y + H - 1 
 LineTo hDC, X + W - 1, Y 
 SelectObject hDC, hPenOld 
 DeleteObject hPen 
 DeleteObject hPenOld 
End Sub 
 
Public Function BoxSolidDC(ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal W As Long, ByVal H As Long, Optional ByVal Fill As OLE_COLOR = vbButtonFace) 
 Dim hBrush As Long 
 Dim R As RECT 
 hBrush = CreateSolidBrush(TranslateColor(Fill)) 
 With R 
  .Left = X 
  .Top = Y 
  .Right = X + W - 1 
  .Bottom = Y + H - 1 
 End With 
 FillRect hDC, R, hBrush 
 DeleteObject hBrush 
End Function 
 
Public Sub BoxRect3DDC(ByVal hDC As Long, R As RECT, Optional Highlight As OLE_COLOR = vb3DHighlight, Optional Shadow As OLE_COLOR = vb3DShadow, Optional Fill As OLE_COLOR = -1) 
 Box3DDC hDC, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, Highlight, Shadow, Fill 
End Sub 
 
Public Sub PaintText(ByVal hDC As Long, ByVal Text$, ByVal X As Single, ByVal Y As Single, ByVal W As Single, ByVal H As Single, Optional ByVal Flags As Long = DT_LEFT) 
 Dim R As RECT 
 With R 
  .Left = X 
  .Top = Y 
  .Right = X + W 
  .Bottom = Y + H 
 End With 
 DrawText hDC, Text$, -1, R, Flags 
End Sub 
 
 
Public Sub DrawFocus(ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal W As Long, ByVal H As Long) 
 Dim R As RECT 
 With R 
  .Left = X 
  .Top = Y 
  .Right = X + W 
  .Bottom = Y + H 
 End With 
 DrawFocusRect hDC, R 
End Sub