HMENUE bei [ALT] ein- und beim nächsten [ALT] wieder ausblenden



  • Hi all,
    für und an sich ist es einfach:

    LRESULT CALLBACK WndProc( HWND myWnd, UINT wndMsg, WPARAM wParam, LPARAM lParam )
    	//This function will recieve all messages, wich will be send by windows to this window.
    {
    	switch( wndMsg )
    	{
    		case WM_KEYDOWN:
    			if( 18 == wParam )
    				//ALT wurde gedrückt
    			{
    				printf( "ALT: %d\n", wParam );
    				SetMenu( myWnd, appMenue );
    				UpdateWindow( myWnd );
    			}
    			else
    				printf( "%d\n", wParam );
    		break;
    	}
    }
    

    wenn ich jetzt [ALT GR] drücke ist die ausgabe wie folgt:

    17
    ALT: 18
    

    und das Menue ist eingeblendet... drücke ich nur [ALT]:
    Menue wird aktiv;

    Ist das Menue ausgeblendet, passier "sichtbar" gar nichts, es wird auch nichts von wegen "ALT: 18" angezeigt.

    Wie bekomme ich den ALT Tastendruck mit? Wie bekomme ich diese Nachricht?
    Hab im Forum gesucht, aber alle diesbezügliche Themen gehen um "STRG+ALT+ENTF" oder soetwas... 😞

    Danke für eure Hilfe.

    [edit]WM_MENUSELECT tut schonmal das was ich brauche, allerdings ist bei dem [ALT] druck immer noch das Icon von dem Fenster selektiert, nicht das menü! und ich müsste halt nur [ALT] bemerken, keine menuaktion, sonst wirds echt unfreundlich mit dem bedienen 😃

    [edit]jetzt bin ich schonmal bei

    case WM_ENTERMENULOOP:
    	SetMenu( myWnd, appMenue );
    break;
    case WM_EXITMENULOOP:
    	SetMenu( myWnd, NULL );
    break;
    

    aber da wird die Menuenachricht nicht mehr gesendet... 😞



  • erledit!

    Ich setze nach dem erhalt der NAchricht das Menue auf NULL...

    Ja ich werde DestroyMenu benutzen!

    [edit]mist... wie bekomme ich mit ob mein eMenu fokusiert ist? Wenn man nichts aus dem Menue auswählt, wird es auch nicht verschwinden xD


  • Mod

    WM_KEYDOWN ist für diese Tasten ungeeignet.
    Verwende WM_SYSKEYDOWN!
    http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx



  • Anhand deines Hinweises konnte ich Feststellen:

    Ich bekomme die Nachricht gar nicht, wenn ich im Menu einfach per [ALT] rausgehe ohne etwas zu machen...

    Warum?


  • Mod

    Natürlich nicht, denn diese Nachricht wird versendet bevor die Messageloop anfängt.

    Wenn das Menü offen ist, erhälst Du WM_MENUCHAR!
    http://msdn.microsoft.com/en-us/library/ms646349(VS.85).aspx

    Siehe auch:
    http://msdn.microsoft.com/en-us/library/ms674709(VS.85).aspx



  • Martin Richter schrieb:

    Natürlich nicht, denn diese Nachricht wird versendet bevor die Messageloop anfängt.

    Wenn das Menü offen ist, erhälst Du WM_MENUCHAR!
    http://msdn.microsoft.com/en-us/library/ms646349(VS.85).aspx

    Siehe auch:
    http://msdn.microsoft.com/en-us/library/ms674709(VS.85).aspx

    2ter link: "Sorry, we were unable to service your request."

    Naja wann das Menue aufgehen soll gebkomme ich ja schon mit, nur wenn der User 2mal ALT drückt (Menue aktivieren, sofort rausgehn ohne aktion) dann bleibts noch da...

    Das Verlassen möchte ich mitbekommen xD

    Danke trotzdem

    [edit]Kann es sein das ich deine Antwort einfach nicht ganz verstanden habe?


  • Mod

    lippoliv schrieb:

    2ter link: "Sorry, we were unable to service your request."

    Funktioniert für mich!

    Das Verlassen möchte ich mitbekommen xD

    Danke trotzdem

    [edit]Kann es sein das ich deine Antwort einfach nicht ganz verstanden habe?

    Kann sein dass Du es nicht verstanden hast. Wie soll ich Dir dabei helfen?
    Hast Du Dir WM_MENUCHAR angesehen?



  • Ja mit dem sollte ich mitbekommen wenn ein Menue betreten wird, und kann Reagieren, was ich ja schon habe...

    Ich will wissen, wann der User mein Menue verlässt.

    [edit]wenn der User (im Menue) eine Taste drückt die nicht als Hotekey eingebunden ist, bekomme ich diese Nachricht


  • Mod

    WM_ENTERMENULOOP/WM_EXITMENULOOP



  • Ja ENTERMENULOOP verwende ich, das is auch total gut;
    Nur wie ich gepostet hatte, bei EXITMENULOOP wurde ja noch keine Aktion ausgeführt...

    Desswegen hatte ich gefragt ob man irgendwie "MENUGETSELECT(HMENU)" machen kann, das problem ist, das ich hier im Forum nur zum Menu direkt was finde, nicht irgendwie kommunizieren... werde aber weitersuchen...

    Verstehst du was mein Problem ist?


  • Mod

    Hast Du Dir mal angesehen, was für Nachrichten laufen? via Spy++



  • Nein, was bringt das?

    Ich bekomme ... ahso.. so meinst du das...

    Interessante idee... Werds mal machen!

    [edit]wo gibt es spy++?

    [edit2]habe mit winspectorgearbeitet! Ich bekomme bei [ALT] die msg WM_IME_SETCONTEXT...
    Einmal gibts eine mit wParam = 0x00000000 und einmal mit 0x00000001 ich glaube letzteres macht es auf, und ersteres macht es zu.. ich tests mal



  • *refresh*
    das eine hat mit dem anderen übrigens nix zu tun, setcontext ist wohl nich dafür...

    Auch mit killfocus kann ich nicht arbeiten...


  • Mod

    Spy++ gehört zum Visualstudio... kann auch sein, dass es als Tools beim Windows SDK mit dabei ist.



  • Jahabe ich dann schon gelesen, nachdem ich verzweifelt das suchen im INET aufgegeben habe, und hier gesucht habe xD
    Sry wegen vorschnellem Post...

    Du kennst das sicher vom Vista Explorer, da ist das auch so, dass wenn du ALT drückst, das Menu eingeblendet wird, und beim nächsten ALT wieder ausgeblendet wird...

    Wie geht das da?



  • Ok ich sehe ein das war eine blöde Frage...
    -wie schon gepostet-

    lippoliv schrieb:

    [edit2]habe mit winspectorgearbeitet! Ich bekomme bei [ALT] die msg WM_IME_SETCONTEXT...
    Einmal gibts eine mit wParam = 0x00000000 und einmal mit 0x00000001 ich glaube letzteres macht es auf, und ersteres macht es zu.. ich tests mal

    Das mit dem WM_IME_SETCONTEXT bringt nichts...

    Wer hat eine Idee?

    Braucht ihr noch Infos? Wisst ihr überhaupt noch was ich meine? Seit ihr bereit mir irgendwie zu Helfen (und wenns nur Tipps / Tuts sind).
    Ich bin für alles Dankbar xD



  • ICH WIEDERUFE MEINE AUSSAGE!

    WM_EXITMENULOOP funktioniert... Keine ahnung warum das letztens nicht ging... Danke an alle!


Anmelden zum Antworten