Tray Icon mit Menue
-
Wie bekommt man es hin ein erstelltes menue bei klickt auf das Icon anzuzeigen?
-
In der OnTrayMessage
die Mousenachricht z.BWM_RBUTTONDOWN
abfangen und dann das menü in der funktion laden.LONG CThreaddefaultDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam) { switch (lparam) { case WM_RBUTTONDOWN: {// The user clicked the right mouse button. // Let's give them a menu so they can start/stop // the animation. CMenu oMenu; if (oMenu.LoadMenu(IDR_MENU1)) { CMenu* pPopup = oMenu.GetSubMenu(0); ASSERT(pPopup != NULL); CPoint oPoint; // Figure out where the mouse is so we // can display the menu near it. GetCursorPos(&oPoint); SetForegroundWindow(); pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, oPoint.x, oPoint.y, this); } } break; case WM_LBUTTONDBLCLK: { ShowWindow(SW_SHOW); } } return 0; }
-
Habe den Code benutzt.
Habe es in der dlg.h so fest gelegt:LONG CTrayDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam);
Aber es gesieht nichts bei Rechtsklickt.
Wo kann das Problem liegen?
-
Soory für den Rechtschreibfehler.
Habe den Code von Unix-Tom benutzt.(PS: Danke)
Diesen habe ich in der dlg.h so fest gelegt:LONG CTrayDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam);
Aber es geschieht nichts bei Rechtsklickt auf das TrayIcon.
Wo kann das Problem liegen?
-
Nicht einfach den Code kopie/paste
Der code wird aufgrund einer Message ausgeführt die auch in die
MESSAGE_MAP eingetragen werden muss.
z.B.const UINT IconID = WM_APP + 1;
BEGIN_MESSAGE_MAP
ON_MESSAGE( IconID, OnTrayMessage )END_MESSAGE_MAP()
Header
afx_msg LONG OnTrayMessage( WPARAM wparam, LPARAM lparam );
-
Es geht irgent wie nicht.
const UINT IconID = WM_APP + 1; BEGIN_MESSAGE_MAP(CCSStarterDlg, CDialog) //{{AFX_MSG_MAP(CCSStarterDlg) ON_MESSAGE( IconID, OnTrayMessage ) ON_WM_SYSCOMMAND() ON_WM_QUERYDRAGICON() ON_WM_CLOSE() ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP()
LONG CCSStarterDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam) { switch (lparam) { case WM_RBUTTONDOWN: {// The user clicked the right mouse button. // Let's give them a menu so they can start/stop // the animation. CMenu oMenu; if (oMenu.LoadMenu(IDR_MENU_TRAY)) { CMenu* pPopup = oMenu.GetSubMenu(1); ASSERT(pPopup != NULL); CPoint oPoint; // Figure out where the mouse is so we // can display the menu near it. GetCursorPos(&oPoint); SetForegroundWindow(); pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, oPoint.x, oPoint.y, this); } } break; case WM_LBUTTONDBLCLK: { ShowWindow(SW_SHOW); } } return 0; }
header
// Generierte Message-Map-Funktionen //{{AFX_MSG(CCSStarterDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg LONG OnTrayMessage( WPARAM wparam, LPARAM lparam ); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnClose(); virtual void OnOK(); virtual void OnCancel(); afx_msg void OnPaint(); //}}AFX_MSG DECLARE_MESSAGE_MAP()
Das müste doch gehen. Das Icon liegt schön in dem Tray doch leider geschied auf rechtsklick nichts.
-
Alles versucht aber keine chance.
-
Schau mal bei Codeguru. Dort gibt es Klassen für TrayIcons.
-
Habe ich schon gesehen. Aber irgent wie steige ich da nicht ganz durch.
-
Wenn du dich Registrierst kannsz du dein Programm zum Download bereitsstellen und ich schaue es mir an.
Einen Code gebe ich dir nicht da du dénn dann wieder entziffern musst.
-
Recht es evl wenn ich meine dlg.cpp und meine dlg.h poster? Weil ich habe in diesen beiden Datein was verändert. Und es ist bist jetzt auch nur dein Code drin.