_GUICtrlButton_GetSplitInfo
Gets information for a split button control
#include <GuiButton.au3>
_GUICtrlButton_GetSplitInfo($hWnd)
Параметры
$hWnd | Дескриптор или идентификатор элемента |
Возвращаемое значение
Успех: Returns array of the followingПримечания
This function works only with the $BS_SPLITBUTTON and $BS_DEFSPLITBUTTON button stylesСм. также
_GUICtrlButton_SetSplitInfoСм. также
Искать BCM_GETSPLITINFO в библиотеке MSDNПример
If @OSVersion = "WIN_XP" And MsgBox(4160 + 4 + 256, "Информация", "Эта функция не работает в WinXP" & @LF & "Продолжить?") = 7 Then Exit
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
Global $btn, $iMemo, $btn2
; Примечание: возвращаемый дескриптор этой кнопки не может быть прочитан с помощью функции GuiCtrlRead
_Main()
Func _Main()
Local $hGUI, $aInfo
$hGUI = GUICreate("Buttons", 400, 400)
$iMemo = GUICtrlCreateEdit("", 10, 100, 390, 284, $WS_VSCROLL)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
$btn = _GUICtrlButton_Create($hGUI, "Split Button", 10, 10, 120, 30, $BS_SPLITBUTTON)
_GUICtrlButton_SetSplitInfo($btn)
$btn2 = _GUICtrlButton_Create($hGUI, "Split Button 2", 10, 50, 120, 30, $BS_SPLITBUTTON)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()
$aInfo = _GUICtrlButton_GetSplitInfo($btn)
MemoWrite("Split Info" & @LF & "----------------")
For $x = 0 To 3
MemoWrite("$ainfo[" & $x & "] = " & $aInfo[$x])
Next
MemoWrite("Split Info" & @LF & "----------------")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
Exit
EndFunc ;==>_Main
; Записывает строку в элемент для заметок
Func MemoWrite($sMessage)
GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc ;==>MemoWrite
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $wParam
Local Const $BCN_HOTITEMCHANGE = -1249
Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code")
Local $nID = DllStructGetData($tNMBHOTITEM, "IDFrom")
Local $hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom")
Local $dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags")
Local $sText = ""
Switch $nNotifyCode
Case $BCN_HOTITEMCHANGE ; Win XP и выше
If BitAND($dwFlags, 0x10) = 0x10 Then
$sText = "$BCN_HOTITEMCHANGE - Наведено: " & @CRLF
ElseIf BitAND($dwFlags, 0x20) = 0x20 Then
$sText = "$BCN_HOTITEMCHANGE - Оставлено: " & @CRLF
EndIf
MemoWrite($sText & _
"-----------------------------" & @CRLF & _
"WM_NOTIFY - информация:" & @CRLF & _
"-----------------------------" & @CRLF & _
"Код уведомления" & @TAB & $nNotifyCode & @CRLF & _
"Идентификатор.." & @TAB & $nID & @CRLF & _
"Дескриптор ...." & @TAB & $hCtrl & @CRLF & _
"Текст кнопки .." & @TAB & _GUICtrlButton_GetText($hCtrl) & @CRLF)
Case $BCN_DROPDOWN
MemoWrite("$BCN_DROPDOWN")
_Popup_Menu($hCtrl)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _Popup_Menu($hCtrl)
Local $hMenu
Local Enum $idOpen = 1000, $idSave, $idInfo
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Open", $idOpen)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Save", $idSave)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "Info", $idInfo)
Switch _GUICtrlMenu_TrackPopupMenu($hMenu, $hCtrl, -1, -1, 1, 1, 2)
Case $idOpen
MemoWrite("Open - Selected")
Case $idSave
MemoWrite("Save - Selected")
Case $idInfo
MemoWrite("Info - Selected")
EndSwitch
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc ;==>_Popup_Menu
; React on a button click
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
Local $hCtrl = $lParam
Local $sText = ""
Switch $hCtrl
Case $btn, $btn2
Switch $nNotifyCode
Case $BN_CLICKED
$sText = "$BN_CLICKED"
Case $BN_PAINT
$sText = "$BN_PAINT"
Case $BN_PUSHED, $BN_HILITE
$sText = "$BN_PUSHED, $BN_HILITE"
Case $BN_UNPUSHED, $BN_UNHILITE
$sText = "$BN_UNPUSHED"
Case $BN_DISABLE
$sText = "$BN_DISABLE"
Case $BN_DBLCLK, $BN_DOUBLECLICKED
$sText = "$BN_DBLCLK, $BN_DOUBLECLICKED"
Case $BN_SETFOCUS
$sText = "$BN_SETFOCUS"
Case $BN_KILLFOCUS
$sText = "$BN_KILLFOCUS"
EndSwitch
MemoWrite( _
"-----------------------------" & @CRLF & _
"WM_COMMAND - информация:" & @CRLF & _
"-----------------------------" & @CRLF & _
"Код уведомления" & @TAB & $nNotifyCode & ', ' & $sText & @CRLF & _
"Идентификатор.." & @TAB & $nID & @CRLF & _
"Дескриптор ...." & @TAB & $hCtrl & @CRLF & _
"Текст кнопки .." & @TAB & _GUICtrlButton_GetText($hCtrl) & @CRLF)
Return 0 ; Только для теста нажатия кнопки
EndSwitch
; Продолжение обработчика внутренних команд AutoIt3.
; Вы также можете завершить, используя строку с выходом из функции.
; !!! Но только 'Return' (без значения) без продолжения
; обработчика внутренних команд AutoIt3 в дальнейшем !!!
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND