Problem mit Kontextmenü

CodeFatal

Erfahrenes Mitglied
Hallo,

ich habe mal wieder ein Problem mit Menüs.
Ich habe eine Applikation die:
Bei OnClose() in die Taskbar verschwindet.(ok)
Linke Maustaste: Fenster kommt wieder (ok)
Rechte Maustaste: Popupmenü erscheint (ok)
Auswahl von Popupmenüitem (ok)
Popupmenü hat Submenüs ( fehlt)
Popupmenü hat Icons/Grafiken (fehlt)

Für den letzten Punkt kann ich - wenn ich das gerade richtig gelesen habe - einfach ein CBitmap Objekt der AppendMenu überbegen.

Der vorletzte Punkt macht mir allerdings einige Kopfschmerzen.
Hab da auch schon viel gegoogelt und die Forensuche benutzt nur leider nicht das richtige gefunden.
Könnt ihr mir vielleicht einen entscheidenden Tipp geben?
Ziel soll ein Menü sein, welches ca. so ausschaut wie das von XP (Start->Programme->usw)
Die Inhalte des Menüs sind dynamisch bzw. können bei jedem Aufruf des Menüs andere sein.
Wie kann ich da Submenüs einbringen?

Folgenden Quellcode habe ich für die Event-Behandlung des Icons:
Code:
LRESULT	CMyDlg::OnTaskbar(WPARAM wParam, LPARAM lParam)
{
	UINT uMouseMsg = (UINT) lParam;
	DWORD dwCommand=0;
	POINT mousepos;
	HMENU m_hMen_Taskbar;
	switch (uMouseMsg)
	{
		case WM_LBUTTONDOWN: 
			ShowWindow(SW_SHOW);
			RemoveTaskbarIcon();//entfernt das Icon aus der Taskbar
			break;
		case WM_RBUTTONDOWN:

			if(!GetCursorPos(&mousepos))
			{
				MessageBox("Konnte Position der Maus nicht bestimmen","Fehler...",MB_ICONERROR|MB_TOPMOST);
			}
		 
			m_hMen_Taskbar = CreatePopupMenu();

			AppendMenu(m_hMen_Taskbar, MF_STRING,1, "Eintrag 1");
			AppendMenu(m_hMen_Taskbar, MF_STRING|MF_DISABLED | MF_GRAYED, 2, "Eintrag 2");

			AppendMenu(m_hMen_Taskbar, MF_SEPARATOR, 3, "Fehler");
			AppendMenu(m_hMen_Taskbar, MF_STRING, 4, "Beenden");


			dwCommand = TrackPopupMenu(m_hMen_Taskbar, TPM_BOTTOMALIGN | TPM_LEFTALIGN | TPM_RETURNCMD|TPM_RIGHTBUTTON , mousepos.x, mousepos.y, 0, this->GetSafeHwnd(), NULL);
			
			switch ( dwCommand )
			{
				case 1:
					AfxMessageBox( "Punkt1" );
					break;
				case 2:
					AfxMessageBox( "Punkt2" );
					break;
				case 3:
					AfxMessageBox( "Fehler" );
					break;
				case 4:
					MessageBox("Programm wird nun beendet","Information...",MB_ICONINFORMATION|MB_TOPMOST);
					PostMessage(WM_CLOSE);
				break;
			}

			break;
		default: break;
	}
	return 0;

}

Danke für eure Hilfe.
Seh vermutlich nur den Wald vor lauter Bäumen nicht:(

Gruß Michael
 

Neue Beiträge

Zurück