Не большой пример, GUI окно с контекстным меню.
Поддерживается :
1. Сохранение настроек в INI файл (работает через WM_COMMAND)
2. "Возврат настроек обратно" (Помечаются галками пункты контекстного меню).
3. Функция настройки по умолчанию.
Поддерживается :
1. Сохранение настроек в INI файл (работает через WM_COMMAND)
2. "Возврат настроек обратно" (Помечаются галками пункты контекстного меню).
3. Функция настройки по умолчанию.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$sPATH_SETTINGS_INI = @ScriptDir & '\Settings_' & StringTrimRight(@ScriptName, 4) & '.ini'
Dim $aContrl[8] = ["Меню 1", "Меню 2", "Меню >", "Под меню 1", "Под меню 2", "Под меню 3", "Выход", "Стандартные настройки"]
;~ $aIniKey[n][0] - Ключ
;~ $aIniKey[n][1] - "Значение по умолчанию"
Dim $aIniKey[5][2] = [ _
["menu 1", "1"], _
["menu 2", "1"], _
["submenu 1", "1"], _
["submenu 2", "4"], _
["submenu 3", "4"]]
GUICreate("My GUI Context Menu", 300, 200)
$ContextMenu = GUICtrlCreateContextMenu()
$ContextMenuString0 = GUICtrlCreateMenuItem($aContrl[0], $ContextMenu)
$ContextMenuString1 = GUICtrlCreateMenuItem($aContrl[1], $ContextMenu)
GUICtrlCreateMenuItem("", $ContextMenu)
$SubMenu = GUICtrlCreateMenu($aContrl[2], $ContextMenu)
$ContextMenuString2 = GUICtrlCreateMenuItem($aContrl[3], $SubMenu)
$ContextMenuString3 = GUICtrlCreateMenuItem($aContrl[4], $SubMenu)
$ContextMenuString4 = GUICtrlCreateMenuItem($aContrl[5], $SubMenu)
GUICtrlCreateMenuItem("", $ContextMenu)
$ContextMenuString5 = GUICtrlCreateMenuItem($aContrl[6], $ContextMenu)
$ContextMenuString6 = GUICtrlCreateMenuItem($aContrl[7], $ContextMenu)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()
_ContextMenuReadSettings()
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE, $ContextMenuString5
Exit
Case $ContextMenuString6
_ContextMenuSettingsDefault()
MsgBox(0,"","Настройки по умолчанию при следующем запуске!")
Exit
Case Else
_ContextMenuChecked()
EndSwitch
WEnd
Func _ContextMenuChecked()
For $i = 0 To 4
If $nMsg[0] = Execute("$ContextMenuString" & $i) Then
If BitAND(GUICtrlRead(Execute("$ContextMenuString" & $i)), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState(Execute("$ContextMenuString" & $i), $GUI_UNCHECKED)
Else
GUICtrlSetState(Execute("$ContextMenuString" & $i), $GUI_CHECKED)
EndIf
EndIf
Next
EndFunc ;==>_ContextMenuChecked
Func _ContextMenuSettingsDefault() ; Настройки по умолчанию
For $i = 0 To UBound($aIniKey) - 1
IniWrite($sPATH_SETTINGS_INI, "settings", $aIniKey[$i][0], $aIniKey[$i][1])
Next
EndFunc ;==>_ContextMenuSettingsDefault
Func _ContextMenuReadSettings() ; Чтение настроек из INI файла
$aArray = IniReadSection($sPATH_SETTINGS_INI, "settings")
If (@error) Or $aArray[0][0] <> UBound($aIniKey) Then _ContextMenuSettingsDefault()
$aArray = IniReadSection($sPATH_SETTINGS_INI, "settings")
If Not (@error) Then
For $i = 0 To UBound($aIniKey) - 1
If $aArray[$i + 1][0] = $aIniKey[$i][0] Then
If $aArray[$i + 1][1] = 1 Then
GUICtrlSetState(Execute("$ContextMenuString" & $i), $GUI_CHECKED)
Else
GUICtrlSetState(Execute("$ContextMenuString" & $i), $GUI_UNCHECKED)
EndIf
EndIf
Next
EndIf
EndFunc ;==>_ContextMenuReadSettings
Func _ContextMenuWhileSettings($sReadContrl)
For $i = 0 To UBound($aIniKey) - 1
If $sReadContrl = $aContrl[$i] Then
If BitAND(GUICtrlRead(Execute("$ContextMenuString" & $i)), $GUI_CHECKED) = $GUI_CHECKED Then
ConsoleWrite("_ContextMenuWhileSettings() \" & $sReadContrl & ' \ ' & $aIniKey[$i][0] & " - "& 4 & @CRLF)
IniWrite($sPATH_SETTINGS_INI, "settings", $aIniKey[$i][0], 4)
Else
ConsoleWrite("_ContextMenuWhileSettings() \" & $sReadContrl & ' \ ' & $aIniKey[$i][0] & " - "& 1 & @CRLF)
IniWrite($sPATH_SETTINGS_INI, "settings", $aIniKey[$i][0], 1)
EndIf
ExitLoop
EndIf
Next
EndFunc ;==>_ContextMenuWhileSettings
Func WM_COMMAND($nHnwd, $MsgID, $WParam, $LParam)
Local $iIDFrom = BitAND($WParam, 0xFFFF) ; Low Word
Local $iCode = BitShift($WParam, 16) ; Hi Word
Local $aRead[2] = [GUICtrlRead($iIDFrom), GUICtrlRead($iIDFrom, 1)]
_ContextMenuWhileSettings($aRead[1])
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND