Tải bản đầy đủ (.pdf) (6 trang)

AutoI Technology Curriculum Book part 80 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (17.42 KB, 6 trang )

$nCtlType = DllStructGetData($stDrawItem, 1)
If $nCtlType = $ODT_BUTTON Then
$nCtrlID = DllStructGetData($stDrawItem, 2)
$nItemState = DllStructGetData($stDrawItem, 5)
$hCtrl = DllStructGetData($stDrawItem, 6)
$hDC = DllStructGetData($stDrawItem, 7)
$nLeft = DllStructGetData($stDrawItem, 8, 1)
$nTop = DllStructGetData($stDrawItem, 8, 2)
$nRight = DllStructGetData($stDrawItem, 8, 3)
$nBottom = DllStructGetData($stDrawItem, 8, 4)
$sText = "Ownerdrawn Button"
$nTextColor = 0x5555DD
$nBackColor = 0xFFEEDD
DrawButton($hWnd, $hCtrl, $hDC, $nLeft, $nTop, $nRight, $nBottom,
$nItemState, $sText, $nTextColor, $nBackColor)
$stDrawItem = 0
Return 1
EndIf

$stDrawItem = 0
Return $GUI_RUNDEFMSG ; Proceed the default Autoit3 internal message
commands
EndFunc ;==>MY_WM_DRAWITEM


; The main drawing procedure
Func DrawButton($hWnd, $hCtrl, $hDC, $nLeft, $nTop, $nRight, $nBottom,
$nItemState, $sText, $nTextColor, $nBackColor)
;Local $bDefault = FALSE
Local Const $GWL_STYLE = -16
Local Const $ODS_SELECTED = 0x0001


Local Const $ODS_GRAYED = 0x0002
Local Const $ODS_DISABLED = 0x0004
Local Const $ODS_CHECKED = 0x0008
Local Const $ODS_FOCUS = 0x0010
Local Const $ODS_HOTLIGHT = 0x0040
Local Const $ODS_INACTIVE = 0x0080
Local Const $ODS_NOACCEL = 0x0100
Local Const $ODS_NOFOCUSRECT = 0x0200
Local Const $DFC_BUTTON = 4
Local Const $DFCS_BUTTONPUSH = 0x0010
Local $bChecked = BitAND($nItemState, $ODS_CHECKED)
Local $bFocused = BitAND($nItemState, $ODS_FOCUS)
Local $bGrayed = BitAND($nItemState, BitOR($ODS_GRAYED,
$ODS_DISABLED))
Local $bSelected = BitAND($nItemState, $ODS_SELECTED)

$stRect = DllStructCreate("int;int;int;int")
DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

If $bGrayed Then
$nClrTxt = SetTextColor($hDC,
GetSysColor($COLOR_HIGHLIGHTTEXT))
ElseIf $nTextColor = -1 Then
$nClrTxt = SetTextColor($hDC, GetSysColor($COLOR_BTNTEXT))
Else
$nClrTxt = SetTextColor($hDC, $nTextColor)
EndIf


If $nBackColor = -1 Then
$hBrush = GetSysColorBrush($COLOR_BTNFACE)
$nClrSel = GetSysColor($COLOR_BTNFACE)
Else
$hBrush = CreateSolidBrush($nBackColor)
$nClrSel = $nBackColor;
EndIf

$nClrBk = SetBkColor($hDC, $nClrSel)
$hOldBrush = SelectObject($hDC, $hBrush)

$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

If $bSelected Then
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -1, -1)
$hBrushSel = CreateSolidBrush(GetSysColor($COLOR_BTNSHADOW))
FrameRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom,
$hBrushSel)
DeleteObject($hBrushSel)
Else
If $bFocused And Not $bSelected Then InflateRect($nTmpLeft, $nTmpTop,
$nTmpRight, $nTmpBottom, -1, -1)
DrawFrameControl($hDC, $nTmpLeft, $nTmpTop, $nTmpRight,
$nTmpBottom, $DFC_BUTTON, $DFCS_BUTTONPUSH)
EndIf


$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

If $bSelected Then
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -2, -2)
Else
If $bFocused And Not $bSelected Then
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -3, -3)
$nTmpLeft -= 1
$nTmpTop -= 1
Else
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -2, -2)
$nTmpLeft -= 1
$nTmpTop -= 1
EndIf
EndIf

FillRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, $hBrush)

If $bSelected Or $bGrayed Then
$nTmpLeft = $nTmpLeft + 2
$nTmpTop = $nTmpTop + 2
EndIf

$uFlags = BitOR($DT_NOCLIP, $DT_CENTER, $DT_VCENTER)

If Not BitAND(GetWindowLong($hCtrl, $GWL_STYLE), $BS_MULTILINE)
Then $uFlags = BitOR($uFlags, $DT_SINGLELINE)


DrawText($hDC, $sText, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom,
$uFlags)

If $bGrayed Then
$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

$nTmpLeft -= 1

$nClrTxt = SetTextColor($hDC, GetSysColor($COLOR_GRAYTEXT))
DrawText($hDC, $sText, $nTmpLeft, $nTmpTop, $nTmpRight,
$nTmpBottom, BitOR($DT_NOCLIP, $DT_CENTER, $DT_VCENTER,
$DT_SINGLELINE))
EndIf

$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

If $bFocused Then
$hBrush = CreateSolidBrush(0)
FrameRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom,
$hBrush)

$nTmpLeft = $nLeft
$nTmpTop = $nTop

$nTmpRight = $nRight
$nTmpBottom = $nBottom

InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -4, -4)
DrawFocusRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight,
$nTmpBottom)
EndIf

SelectObject($hDC, $hOldBrush)
DeleteObject($hBrush)
SetTextColor($hDC, $nClrTxt)
SetBkColor($hDC, $nClrBk)

Return 1
EndFunc ;==>DrawButton


; Some graphic / windows functions
Func CreateSolidBrush($nColor)
Local $hBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int",
$nColor)
Return $hBrush[0]
EndFunc ;==>CreateSolidBrush


Func GetSysColor($nIndex)
Local $nColor = DllCall("user32.dll", "int", "GetSysColor", "int", $nIndex)
Return $nColor[0]
EndFunc ;==>GetSysColor



Func GetSysColorBrush($nIndex)
Local $hBrush = DllCall("user32.dll", "hwnd", "GetSysColorBrush", "int",
$nIndex)
Return $hBrush[0]
EndFunc ;==>GetSysColorBrush


Func DrawFrameControl($hDC, $nLeft, $nTop, $nRight, $nBottom, $nType,
$nState)
Local $stRect = DllStructCreate("int;int;int;int")

DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

DllCall("user32.dll", "int", "DrawFrameControl", "hwnd", $hDC, "ptr",

×