Zum Inhalt springen

Empfohlene Beiträge

  • 3 Wochen später...
Geschrieben

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

Geschrieben

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?

Geschrieben

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

Geschrieben

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.

Geschrieben

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:

Geschrieben
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.
Geschrieben

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?

Geschrieben
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

Geschrieben

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.

  • 1 Monat später...
  • 3 Wochen später...
Geschrieben

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);

}

Geschrieben

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.

Geschrieben

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]

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...