BEGIN_MESSAGE_MAP(CMy3Dlg, CDialog)
//{{AFX_MSG_MAP(CMy3Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE ( WM_TRAYNOTIFY, OnTrayNotify )
ON_WM_WINDOWPOSCHANGING()
ON_COMMAND(ID_APP_OPTIONS, OnAppStart)
ON_COMMAND(ID_APP_EXIT, OnAppExit)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Иконка в System Tray.
Здесь уже поднималась тема про иконки в System Tray (Как создать Dialog невидемый в Task Bar и System Tray). Как наоборот создать диалоговое окно, которое бы сворачиавлось в иконку в System Tray и было бы везде видимо? Может есть ссылки с толковыми объяснениями?
контекстное меню.
Код:
Меню появляется по функции OnTrayNotify:
Код:
...
LRESULT CMy3Dlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
//Return quickly if its not for this tray icon
if (wParam != nid.uID) return 0L;
CMenu menu, *pSubMenu;
CWnd *pTargetWnd = AfxGetMainWnd();
if (!pTargetWnd) return 0L;
if (LOWORD (lParam) == WM_RBUTTONUP)
{
if (!menu.LoadMenu(IDR_POPUP_MENU)) return 0;
pSubMenu = menu.GetSubMenu(0);
if (!pSubMenu)
return 0;
// Make chosen menu item the default (bold font)
::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);
// Display and track the popup menu
CPoint pos;
GetCursorPos(&pos);
pTargetWnd->SetForegroundWindow();
::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0,
pTargetWnd->GetSafeHwnd(), NULL);
pTargetWnd->PostMessage(WM_NULL, 0, 0);
menu.DestroyMenu();
}
...
}
...
LRESULT CMy3Dlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
//Return quickly if its not for this tray icon
if (wParam != nid.uID) return 0L;
CMenu menu, *pSubMenu;
CWnd *pTargetWnd = AfxGetMainWnd();
if (!pTargetWnd) return 0L;
if (LOWORD (lParam) == WM_RBUTTONUP)
{
if (!menu.LoadMenu(IDR_POPUP_MENU)) return 0;
pSubMenu = menu.GetSubMenu(0);
if (!pSubMenu)
return 0;
// Make chosen menu item the default (bold font)
::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);
// Display and track the popup menu
CPoint pos;
GetCursorPos(&pos);
pTargetWnd->SetForegroundWindow();
::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0,
pTargetWnd->GetSafeHwnd(), NULL);
pTargetWnd->PostMessage(WM_NULL, 0, 0);
menu.DestroyMenu();
}
...
}
...
Как бы мне нажатую кнопку деактивировать?
m_Valery спасибо за код, все отлично работает! В VS 6