Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

  • 3 Wochen später...

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

  • Autor

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?

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

  • Autor

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.

  • Autor

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:

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.
  • Autor

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?

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

  • Autor

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...
  • Autor

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

}

  • Autor

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.

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]

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.