Narf! Geschrieben 18. Oktober 2002 Geschrieben 18. Oktober 2002 Hallöchen! Wenn ich das Menü aktiviere und darin herumnavigiere, möchte ich Ereignisse starten, wie kann ich das schreiben? Zitieren
Narf! Geschrieben 4. November 2002 Autor Geschrieben 4. November 2002 Kann mir jemand helfen!?! Zitieren
Guybrush Threepwood Geschrieben 4. November 2002 Geschrieben 4. November 2002 Meinst du ein ganz normales Menü mit z.B. Datei, Bearbeiten usw?? Wenn ja kannst du das mit WM_COMMAND abfangen. BSP: case WM_COMMAND: { switch(LOWORD(wParam)) { case ID_DATEI_OEFFNEN: //Wenn jemand im Menü { //Datei auf Öffnen klickt //irgendwelcher code return 0; } } [/PHP] Gruß Guybrush Zitieren
Narf! Geschrieben 5. November 2002 Autor Geschrieben 5. November 2002 Hidiho, ja, sowas in der Art. Ich habe aber kein WM_COMMAND zur Auswahl nur OnCommand oder OnCmdMsg. Ich habe die Befehle aus dem Menü in meiner Dialog-Klasse stehen. Kann ich da trotzdem was tun? Wenn ich das Menü in eine eigene Klasse packen muss, was ist da als Basis-Klasse anzugeben? Zitieren
Guybrush Threepwood Geschrieben 5. November 2002 Geschrieben 5. November 2002 Sorry, aber wenn du das mit den MFC machst kann ich dir so aus dem stehgreif nicht helfen. Gruß Guybrush Zitieren
Guybrush Threepwood Geschrieben 5. November 2002 Geschrieben 5. November 2002 Hi, ich hab mir das gerade mal angeschaut. Du mußt wenn du z.B einen Menüpunkt ID_DATEI_NEU hast in den Klassenassistenten gehen und in der Nachrichten- zuordnungstabelle diesen Menüpunkt auswählen und rechts daneben in dem Fenster Nachrichten auf "Command" klicken und dann kannst du den Button "Funktion hinzufügen" drücken. Der KA fügt deinem Projekt dann automatisch eine Funktion hinzu in der du sagen kannst was passieren soll wenn einer auf den Menüpunkt klickt. Gruß Guybrush Zitieren
Narf! Geschrieben 5. November 2002 Autor Geschrieben 5. November 2002 Oje, kleines Missverständnis, weil ich da schon Code eingefügt habe. Ich möchte eine Aktion ausführen, wenn der Menüpunkt aktiviert wird, also z.B. wenn die ALT-Taste gedrückt wird, die das Menü aktiviert, dann soll was passieren und wenn man in dem Menü per Tastatur von Punkt zu Punkt herumnavigiert. Zitieren
Klotzkopp Geschrieben 5. November 2002 Geschrieben 5. November 2002 Das geht mit einem normalen Menü nicht. Dazu musst Du eine Klasse von CMenu ableiten und DrawItem überschreiben. Diese Methode wird u.a. aufgerufen, wenn sich die Menüauswahl ändert. Im CTRLTEST-Beispiel wird das gemacht: http://msdn.microsoft.com/library/en-us/vcsample98/html/_sample_mfc_ctrltest.asp Zitieren
Narf! Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 Ich habe mir das mal angeschaut, aber es ist nicht das Richtige, weil diese Ereignisse erst eintreten, wenn der Befehl bestätigt wurde, für mich ist das zu spät. Es soll schon was passieren, wenn ich die ALT-Taste drücke und das Menü somit aktiviere und wenn ich mit dem blauen Balken auf ein Item komme. Ich habe schon einige Programme gesehen, die darauf reagieren. Ich hoffe, mir kann da jemand helfen, es ist sehr wichtig. :confused: Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Warum fragst dann nicht einfach unabhängig von deinem Menü ab ob jemand die ALT Taste drückt? Zitieren
Klotzkopp Geschrieben 8. November 2002 Geschrieben 8. November 2002 Originally posted by Narf! Ich habe mir das mal angeschaut, aber es ist nicht das Richtige, weil diese Ereignisse erst eintreten, wenn der Befehl bestätigt wurde, für mich ist das zu spät.Dann hast Du es Dir nicht richtig angesehen. In der verwendeten Menüklasse ist DrawItem überschrieben. DrawItem wird immer aufgerufen, wenn sich der Zustand eines Menüeintrags ändert. Dazu zählt auch die Selektion bzw. Deselektion. Zitieren
Narf! Geschrieben 13. November 2002 Autor Geschrieben 13. November 2002 Ich hab's mir nochmal angesehen, aber es ist ein "Bömisches Dorf". Wenn ich eine neue Klasse erstellen will, fragt er nach einer Basisklasse. Es steht aber CMenu nicht zur Auswahl. Ich beschreibe mal mein Vorhaben genauer: Wenn die ALT-Tatse gedrückt wird, um das Menü zu aktivieren, soll in der Statusleiste ein entsprechender Text stehen. Wenn der Nutzer dann das Menü mit der "Nach-unten-Taste" öffnet, soll entsprechend meiner Einträge im Menü der Text mit der Menüüberschrift als so eine Art Pfad in der Statuszeile stehen. Z.Bsp: Datei/Öffnen Es ist hoffentlich nicht so kompliziert wie ich mir das vorstelle, oder? Zitieren
Klotzkopp Geschrieben 13. November 2002 Geschrieben 13. November 2002 Originally posted by Narf! Es ist hoffentlich nicht so kompliziert wie ich mir das vorstelle, oder? Nein, das ist ganz leicht. Hättest Du gleich gesagt, was Du willst, hätten wir das viel schneller lösen können. Statuszeilentexte und Tooltips sind nämlich schon eingebaut: Du musst nur in der Stringtabelle einen neuen String anlegen, mit derselben Ressource-ID wie der Menüeintrag. In diesem Text stehen zwei Texte, getrennt durch ein \n. Der Text vor dem \n erscheint in der Statuszeile, der nach dem \n im Tooltip, falls die Ressource-ID auch einem Toolbar-Button zugeordnet wurde. Beispiel: Das ist der Statuszeilentext\nDer Tooltiptext steht hier Zitieren
Narf! Geschrieben 13. November 2002 Autor Geschrieben 13. November 2002 Vielen Dank für den Tipp, aber das war noch nicht alles. Es soll noch mehr passieren, z. Bsp. Sound abspielen. Und das soll alles passieren bevor der Befehl bestätigt wurde, also schon, wenn man mit dem Auswahlbalken über die Einträge fährt. Zitieren
Narf! Geschrieben 19. Dezember 2002 Autor Geschrieben 19. Dezember 2002 Ich habe diesen Tipp bekommen: SetWindowsHookEx(); Kann jemand was damit anfangen? Zitieren
Narf! Geschrieben 8. Januar 2003 Autor Geschrieben 8. Januar 2003 Problem gelöst! Es ist eigentlich ganz einfach, wenn man mal drauf kommt. Man kann die Nachrichten abfangen und entsprechend Code einfügen. LRESULT CTest2Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message==WM_MENUSELECT) { ... } return CDialog::WindowProc(message, wParam, lParam); } Zitieren
Narf! Geschrieben 9. Januar 2003 Autor Geschrieben 9. Januar 2003 Ein klarer Fall von voreilig! Das klappt nur bei Menüitems mit einer eigenen ID (ID_Datei_Neu, aus resource.h). Bei den Hauptmenüpunkten, z.Bsp.: Datei, haut es schon nicht mehr hin, da es keine eigene ID hat. Nun habe ich versucht, die Beschriftung auszulesen, um die zu vergleichen: if(message==WM_MENUSELECT) { if(wParam==9437184) { HMENU hMenu; LPTSTR lpString; int x=wParam; GetMenuString(hMenu, x, lpString, 100, MF_BYCOMMAND); SetDlgItemText(IDC_STATIC_wP, lpString); //einfach eine Anzeige des Textes } } Bei GetMenuString() steigt Windows aus. Zitieren
Klotzkopp Geschrieben 9. Januar 2003 Geschrieben 9. Januar 2003 lpString muss schon auf einen gültigen Puffer zeigen Außerdem musst du das Menu-Handle mit einem gültigen Wert initialisieren. Das ganze könnte so aussehen: if( message == WM_MENUSELECT ) { if( HIWORD(wParam) != 0xffff ) { char szTest[200]; if( HIWORD( wParam ) & MF_POPUP ) { GetMenuString( (HMENU)lParam, LOWORD(wParam), szTest, 199, MF_BYPOSITION ); } else { GetMenuString( (HMENU)lParam, LOWORD(wParam ), szTest, 199, MF_BYCOMMAND ); } } }[/CODE] Zitieren
Narf! Geschrieben 9. Januar 2003 Autor Geschrieben 9. Januar 2003 Wiedermal gerettet, vielen Dank! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.