1、Toolbar的创建
1.1、create toolbar
1.2、add bitmap/imagelist/tooltip
1.3、Add button and string
2、Toolbar的消息响应(这里仅指ToolTip和$NM_LDOWN)
注册_WM_NOTIFY()处理$WM_NOTIFY消息:GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")
这里要注意结构体:
Global Const $tagNMHDR = "struct; hwnd hWndFrom;uint_ptr IDFrom;INT Code; endstruct"
hWndFrom | Window handle to the control sending a message |
IDFrom | Identifier of the control sending a message |
Code | Notification code |
源码如下:
#include <GUIConstantsEx.au3>
#include <GuiToolbar.au3>
#include <WindowsConstants.au3>
#include <GuiToolTip.au3>
Global $hGUI, $hToolbar, $aStrings[5],$iItem
Global Enum $idOpen=1000, $idSave,$idundo,$idredo
; Create GUI
$hGUI = GUICreate("Toolbar", 400, 300,-1,-1,$WS_OVERLAPPEDWINDOW)
$hToolbar = _GUICtrlToolbar_Create($hGUI)
$hToolTip = _GUIToolTip_Create($hToolbar)
_GUICtrlToolbar_SetToolTips($hToolbar, $hToolTip)
GUISetState(@SW_SHOW )
; Add standard system bitmaps
_GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_LARGE_COLOR)
; Add strings
$aStrings0 = _GUICtrlToolbar_AddString($hToolbar, "&Open")
$aStrings1 = _GUICtrlToolbar_AddString($hToolbar, "&Save")
$aStrings2 = _GUICtrlToolbar_AddString($hToolbar, "&Undo")
$aStrings3 = _GUICtrlToolbar_AddString($hToolbar, "&Redo")
; Add buttons
_GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN, $aStrings0)
_GUICtrlToolbar_AddButton($hToolbar, $idSave, $STD_FILESAVE, $aStrings1)
_GUICtrlToolbar_AddButtonSep($hToolbar)
_GUICtrlToolbar_AddButton($hToolbar, $idundo, $STD_UNDO, $aStrings2)
_GUICtrlToolbar_AddButton($hToolbar, $idredo, $STD_REDOW, $aStrings3)
GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")
; Loop until the user exits.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
#forceref $hWndGUI, $MsgID, $wParam
Local $tNMHDR, $hwndFrom, $code, $i_idNew, $dwFlags, $i_idOld
Local $tNMTBHOTITEM
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hwndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$code = DllStructGetData($tNMHDR, "Code")
Switch $hwndFrom
Case $hToolbar
Switch $code
Case $NM_LDOWN
Switch $iItem
Case 1000
MsgBox(262208, "", "Open Button")
Case 1001
MsgBox(262208, "", "Save Button")
Case 1002
MsgBox(262208, "", "Undo Button")
Case 1003
MsgBox(262208, "", "Redo Button")
EndSwitch
Case $TBN_HOTITEMCHANGE
$tNMTBHOTITEM = DllStructCreate($tagNMTBHOTITEM, $lParam)
$i_idOld = DllStructGetData($tNMTBHOTITEM, "idOld")
$i_idNew = DllStructGetData($tNMTBHOTITEM, "idNew")
$iItem = $i_idNew
EndSwitch
EndSwitch
Local $tInfo, $iID, $iCode
$tInfo = DllStructCreate($tagNMTTDISPINFO, $lParam)
$iCode = DllStructGetData($tInfo, "Code")
If $iCode = $TTN_GETDISPINFOW Then
$iID = DllStructGetData($tInfo, "IDFrom")
Switch $iID
Case 1000
DllStructSetData($tInfo, "aText", "Open")
Case 1001
DllStructSetData($tInfo, "aText", "Save")
Case 1002
DllStructSetData($tInfo, "aText", "Undo")
Case 1003
DllStructSetData($tInfo, "aText", "Redo")
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_NOTIFY