MenuItem von SubMenu-Beginn unterscheiden

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
iostream
Beiträge: 109
Registriert: 15.06.2008 12:59

MenuItem von SubMenu-Beginn unterscheiden

Beitrag von iostream »

Wie kann ich bei folgendem Code das erste Item von dem SubMenu-Beginn unterscheiden, wenn beide anscheinend die gleiche ID haben?

Code: Alles auswählen

Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
	If uMsg = #WM_MENUSELECT
		Debug wParam & $FF
	EndIf
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, 0, 0, 400, 250, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	SetWindowCallback(@WindowCallback())
	
	If CreateMenu(0, WindowID(0))
		MenuTitle("Title")
		MenuItem(1, "Item")
		OpenSubMenu("SubMenu-Begin")
		CloseSubMenu()
	EndIf
	
	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
OS: Windows 8.1 Pro
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: MenuItem von SubMenu-Beginn unterscheiden

Beitrag von Fluid Byte »

Steht eigentlich alles bei den Infos für #WM_MENUSELECT auf MSDN aber egal ...

Code: Alles auswählen

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
   If uMsg = #WM_MENUSELECT            
      If wParam >> 16 & #MF_POPUP
      	Debug Str(wParam & $FF) + " (SUBMENU)"
      Else
      	Debug wParam & $FF
      EndIf      
   EndIf
   
   ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

OpenWindow(0, 0, 0, 400, 250, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@WindowCallback())
   
CreateMenu(0, WindowID(0))
MenuTitle("Title")
MenuItem(1, "Item1")
MenuItem(2, "Item2")
MenuItem(3, "Item3")
OpenSubMenu("SubMenu-Begin")
CloseSubMenu()

While WaitWindowEvent() ! 16 : Wend
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: MenuItem von SubMenu-Beginn unterscheiden

Beitrag von hjbremer »

er war schneller

trotzdem hier meine Idee, im Prinzip das Gleiche

Code: Alles auswählen

Procedure WindowCallback(hWnd, uMsg, wParam, lParam)


   If uMsg = #WM_MENUSELECT
      Debug wParam & $FF
            
      If (wParam >> 16) & $FF - 128 = #MF_POPUP 
         Debug "ich habe ein SubMenu"
      EndIf
      
   EndIf
   ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, 0, 0, 400, 250, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   SetWindowCallback(@WindowCallback())
   
   If CreateMenu(0, WindowID(0))
      MenuTitle("Title")
      MenuItem(1, "Item")
      MenuItem(2, "Item")
      OpenSubMenu("SubMenu-Begin")
         MenuItem(3, "Item")
      CloseSubMenu()
   EndIf
   
   Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Ansonsten, solltest du nur ein Submenu sperren wollen, so gibt es GetSubMenu_(MenuID(nr), x)

Code: Alles auswählen

If OpenWindow(0, 0, 0, 400, 250, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
     
   If CreateMenu(0, WindowID(0))
      MenuTitle("Title")
      MenuItem(1, "Item")
      MenuItem(2, "Item")
      OpenSubMenu("SubMenu-Begin")
         MenuItem(3, "Item")
      CloseSubMenu()
      MenuTitle("xyz")
      MenuItem(11, "Item")
      OpenSubMenu("SubMenu-Begin")
         MenuItem(13, "Item")
      CloseSubMenu()
   EndIf
   
   EnableMenuItem_(GetSubMenu_(MenuID(0), 0), 2, #MF_BYPOSITION | #MF_GRAYED)
   EnableMenuItem_(GetSubMenu_(MenuID(0), 1), 1, #MF_BYPOSITION | #MF_GRAYED)
   
   Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
iostream
Beiträge: 109
Registriert: 15.06.2008 12:59

Re: MenuItem von SubMenu-Beginn unterscheiden

Beitrag von iostream »

Danke an euch beide...werde msdn doch genauer lesen müssen ^^
OS: Windows 8.1 Pro
Antworten