Code:
'------------------------------------------------------------------------------------------------------- ' INCLUDE FILES '------------------------------------------------------------------------------------------------------- #If Not %Def(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF '------------------------------------------------------------------------------------------------------- ' FUNCTION DECLARATIONS '------------------------------------------------------------------------------------------------------- Declare Sub SwitchMenuItemCheck(sMenuString As String) Declare Sub SetMenuItemCheck(sMenuString As String, lCheckState As long) Declare Function GetMenuItemCheck(sMenuString As String) As long Declare Function VCIsCurrentWorldValid Lib "VCMAIN32.DLL" Alias "VCIsCurrentWorldValid" () As Integer Declare Function VCGethWndFrame Lib "VCMAIN32.DLL" Alias "VCGethWndFrame" () As Long Declare Sub SetMenuChecksByDrawingSettings() '------------------------------------------------------------------------------------------------------- ' SUB GetMenuItemCheck '------------------------------------------------------------------------------------------------------- Function GetMenuItemCheck(sMenuString As String) As Long Local hWnd As Long Local hMenu As Long Local lMenuCount As Long Local lSubMenuCount As Long Local hSubMenu As Long Local ItemID As Long Local lRes As Long Local szMenuString As Asciiz * 64 Local MainMenuIndex As Long Local SubMenuIndex As Long Local iState As Integer Function = %MF_UNCHECKED If VCIsCurrentWorldValid() = 0 Then Exit Function hWnd = VCGetHwndFrame() 'Mcadd frame handle ' hMenu = GetSystemMenu(hWnd, 0) 'prüfen, ob Systemmenü aktiv ' lSysMenuCount = GetMenuItemCount(hMenu) 'Anzahl der aktiven Systemmenü-Items hMenu = GetMenu(hWnd) 'Handle des Mcadd Hauptmenüs lMenuCount = GetMenuItemCount(hMenu) 'Anzahl der Untermenüs im Hauptmenü = 14 ohne Systemmenü, 18 mit Systemmenü For MainMenuIndex = 0 To lMenuCount -1 hSubMenu = GetSubMenu(hMenu, MainMenuindex) 'Handle des Untermenüs mit Menütitel "Layer" lSubMenuCount = GetMenuItemCount(hSubMenu) For SubMenuIndex = 0 To lSubMenuCount - 1 ItemID = GetMenuItemID(hSubMenu, SubMenuIndex) 'ID des ersten Menüeintrags im Untermenü 4 lRes = GetMenuString(hSubMenu, ItemID, szMenuString, 0, %MF_BYCOMMAND) 'zuerst mit Parameter 0 nur die Länge ermitteln lRes = GetMenuString(hSubMenu, ItemID, szMenuString, lRes, %MF_BYCOMMAND) 'jetzt über die Länge den String ermitteln If InStr(szMenuString, sMenuString) Then iState = GetMenuState(hMenu, ItemID, %MF_BYCOMMAND Or %MF_CHECKED) Function = iState Exit For End If Next SubMenuIndex Next MainMenuIndex End Function '------------------------------------------------------------------------------------------------------- ' SUB SetMenuItemCheck '------------------------------------------------------------------------------------------------------- Sub SetMenuItemCheck(sMenuString As String, iCheckVal As Long) 'INPUT: iCheckVal = %MF_CHECKED oder iCheckVal = %MF_UNCHECKED 'INPUT alternativ: iCheckVal = 1 oder iCheckVal = 0 Local hWnd As Long Local hMenu As Long Local lMenuCount As Long Local lSubMenuCount As Long Local hSubMenu As Long Local ItemID As Long Local lRes As Long Local MainMenuIndex As Long Local SubMenuIndex As Long Local szMenuString As Asciiz * 64 If VCIsCurrentWorldValid() = 0 Then Exit Sub If iCheckVal = 0 Then iCheckVal = %MF_UNCHECKED ElseIf iCheckVal = 1 Then iCheckVal = %MF_CHECKED End If hWnd = VCGetHwndFrame() 'Mcadd frame handle ' hMenu = GetSystemMenu(hWnd, 0) 'prüfen, ob Systemmenü aktiv ' lSysMenuCount = GetMenuItemCount(hMenu) 'Anzahl der aktiven Systemmenü-Items hMenu = GetMenu(hWnd) 'Handle des Mcadd Hauptmenüs lMenuCount = GetMenuItemCount(hMenu) 'Anzahl der Untermenüs im Hauptmenü = 14 ohne Systemmenü, 18 mit Systemmenü For MainMenuIndex = 0 To lMenuCount -1 hSubMenu = GetSubMenu(hMenu, MainMenuindex) 'Handle des Untermenüs per MainMenuindex lSubMenuCount = GetMenuItemCount(hSubMenu) For SubMenuIndex = 0 To lSubMenuCount - 1 ItemID = GetMenuItemID(hSubMenu, SubMenuIndex) 'ID des ersten Menüeintrags im Untermenü per SubMenuIndex lRes = GetMenuString(hSubMenu, ItemID, szMenuString, 0, %MF_BYCOMMAND) 'zuerst mit Parameter 0 nur die Länge ermitteln lRes = GetMenuString(hSubMenu, ItemID, szMenuString, lRes, %MF_BYCOMMAND) 'jetzt über die Länge den String ermitteln If InStr(szMenuString, sMenuString) Then lRes = CheckMenuItem(hSubMenu, ItemID, %MF_BYCOMMAND Or iCheckVal) Exit For End If Next SubMenuIndex Next MainMenuIndex End Sub
Leave a comment: