Zum Inhalt springen

Kontextmenü in Trayleiste


Matthes

Empfohlene Beiträge

Hallo,

ich habe eine Anwendung, die als Icon in der Trayleiste läuft.

Wenn ich nun mit der rechten Maustaste auf das Icon klicke soll ein Kontextmenü aufpoppen.

Das klappt auch einigermaßen, allerdings geschieht das nicht bei jedem Rechtsklick auf das Icon.

Es kommt also vor, dass man drei bis vier mal aud das Icon klicken muss, bis sich das Kontextmenü zeigt...

Hier mal der Code:

void CMainFrame::OnAusblenden() //Versteckt Anwendung und zeigt Icon im Tray

{

HICON hIcon=AfxGetApp() ->LoadIcon(IDR_MAINFRAME);

ShowWindow( SW_HIDE );

NOTIFYICONDATA nid;

memset( &nid, 0, sizeof( nid));

nid.cbSize = sizeof(NOTIFYICONDATA);

nid.hWnd = GetSafeHwnd();

nid.uID = 0;

nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

nid.uCallbackMessage = UM_TRAY_ACTION;

wsprintf( nid.szTip, TEXT("Monitor"));

nid.hIcon = hIcon;

Shell_NotifyIcon( NIM_ADD, &nid);

}

// Wird aufgerufen wenn Nachricht an Icon geht

void CMainFrame::OnTrayAction(WPARAM wParam, LPARAM lParam)

{

//bei Doppelklick Anwendung zeigen und Icon entfernen

//Das klappt einwandfrei

if( lParam == WM_LBUTTONDBLCLK )

{

NOTIFYICONDATA nid;

memset( &nid, 0, sizeof( nid));

nid.cbSize = sizeof(NOTIFYICONDATA);

nid.hWnd = GetSafeHwnd();

nid.uID = 0;

Shell_NotifyIcon( NIM_DELETE, &nid);

ShowWindow( SW_SHOW );

}

//Bei Rechtsklick Kontextmenü aufrufen, klappt nur manchmal

else if(lParam == WM_RBUTTONDOWN)

{

CPoint Point;

GetCursorPos(&Point);

SetForegroundWindow();

CMenu menu;

menu.LoadMenu(IDR_MENU1);

menu.GetSubMenu(0)->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON,Point.x ,Point.y, AfxGetMainWnd(),NULL); }

}

Hat jemand ne Idee warum das nicht immer klappt???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von mogli_81

Klotzkopp ich lieb Dich :hodata :D

*rotwerd* Nicht doch... :D

Jetzt klappt es, nur ich frage mich warum!

Kannste das vielleicht noch mal kurz erklären?

Das TrackPopupMenu-Problem bei Trayicons ist angeblich ein Feature. Ich finde den KB-Artikel gerade nicht, aber hier steht etwas darüber, unter "NOTE on TrackPopupMenu":

http://www.codeproject.com/shell/systemtray.asp

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Monate später...

Ich hab da irgendwie noch Probleme mit. Bei mir stellt er das Popupmenü

nur ca 2mm breit dar, sodass man nichts lesen kann. Man kann aber trotzdem

die einzelnen Einträge auswählen:confused:


if(lParam == WM_RBUTTONDOWN)
{
POINT Point;
GetCursorPos(&Point);

SetForegroundWindow(hWnd);
TrackPopupMenu(LoadMenu(g_.hInst,MAKEINTRESOURCE(IDR_MENU1)),
TPM_CENTERALIGN,
Point.x,Point.y,0,hWnd,0);
}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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