Prev: optimization
Next: Lost Mail
From: David Ching on
FWIW, I couldn't find anything wrong with your code. It looks fine. You
might want to try PostMessage(WM_CLOSE) instead. Does it still fail if the
dialog is visible?

Thanks,
David

"dushkin" <taltene(a)gmail.com> wrote in message
news:078a3b75-73a1-42b2-b265-031daa2239db(a)f8g2000yqn.googlegroups.com...
> Hi all.
>
> I have two questions regarding a very simple tray application. The
> application does nothing. It only appears in the system tray. I want
> to add a floating menu to it with a "close" menu item that will close
> the process. The application is an MFC dialog based application. I
> work with VS2008.
>
> My questions are:
>
> 1. I added a message handler to the "close" menu item. The handler is
> called only after I first r-clicking the app icon, select the "close"
> item and again r-clicking the app icon in the tray. Why?
>
> 2. Then, I put SendMessage(WM_CLOSE) in the handler. The application
> was not closed. Why?
>
> The code is as follows:
>
> //-----------------------------------------------------------------
> cpp file
> //-----------------------------------------------------------------
>
> BEGIN_MESSAGE_MAP(CVPGAgentDlg, CDialog)
> ON_WM_SYSCOMMAND()
> ON_WM_PAINT()
> ON_WM_QUERYDRAGICON()
> ON_MESSAGE(MYWM_NOTIFYICON,onTrayNotify)
> //}}AFX_MSG_MAP
> ON_WM_DESTROY()
> ON_WM_CLOSE()
> ON_COMMAND(ID_AGENTMENU_CLOSE, OnAgentClose)
> END_MESSAGE_MAP()
>
> void CVPGAgentDlg::SetSysTrayIcon(void)
> {
> HICON m_hicon = ::LoadIcon(AfxGetInstanceHandle(),
> MAKEINTRESOURCE(IDI_SYSTRAYICON));
>
> CString sTip(_T("PA Agent"));
>
> m_pnId.cbSize = sizeof(NOTIFYICONDATA);
> m_pnId.hWnd = this->GetSafeHwnd();
> m_pnId.uID = IDI_SYSTRAYICON;
> //ICON RESOURCE ID
> m_pnId.uFlags = NIF_MESSAGE|NIF_ICON;
> m_pnId.uCallbackMessage = MYWM_NOTIFYICON;
> m_pnId.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
> m_pnId.hIcon = m_hicon;
> //ICON RESOURCE ID
> lstrcpyn(m_pnId.szTip, (LPCTSTR)sTip, sizeof(m_pnId.szTip));
>
> DWORD dwMessage = NIM_ADD;
> Shell_NotifyIcon(dwMessage, &m_pnId);
>
> m_TrayMenu.LoadMenu(IDR_MENU1);
> }
>
> LRESULT CVPGAgentDlg::onTrayNotify(WPARAM wParam,LPARAM lParam)
> {
> UINT uMsg = (UINT) lParam;
> switch (uMsg )
> {
> case WM_LBUTTONDBLCLK:
> this->ShowWindow(SW_SHOW);
> break;
> case WM_RBUTTONUP:
> CPoint pt;
> GetCursorPos(&pt);
>
> SetForegroundWindow();
> m_TrayMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTALIGN|
> TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,this);
> PostMessage(WM_NULL, 0, 0);
>
> break;
> }
> return TRUE;
> }
>
> void CVPGAgentDlg::OnAgentClose()
> {
> AfxMessageBox("a");
> //SendMessage(WM_CLOSE);
> }
>
> void CVPGAgentDlg::OnDestroy()
> {
> Shell_NotifyIcon(NIM_DELETE,&m_pnId);
> CDialog::OnDestroy();
>
> // TODO: Add your message handler code here
> }
>
>
> //-----------------------------------------------------------------
> h file:
> //-----------------------------------------------------------------
> #define MYWM_NOTIFYICON (WM_USER+1)
>
> CMenu m_TrayMenu;
> NOTIFYICONDATA m_pnId;
>
> void SetSysTrayIcon(void);
>
> afx_msg LRESULT onTrayNotify(WPARAM, LPARAM);
> afx_msg void OnAgentClose();
> afx_msg void OnClose();
> afx_msg void OnDestroy();
>
>
>
>
> THANKS!
>
>
From: dushkin on
On Mar 17, 8:55 pm, "Tom Serface" <t...(a)camaswood.com> wrote:
> PJ has had this for a while, but the technology hasn't changed much in the
> last years so it still works really well.  Worth a look anyway.
>
> Tm
>
> "dushkin" <talt...(a)gmail.com> wrote in message
>
> news:81012ed3-aa95-4c27-b2ac-846c742f8324(a)g11g2000yqe.googlegroups.com...
>
>
>
> > Seems to be great! I will check it. Thanks!
> > Did you really maintained this package 11 years?!?!
> > :-)

Tom, I used your classes. Same results.
Here are the relevant code sections:

CTrayNotifyIcon g_TrayIcon1;

BEGIN_MESSAGE_MAP(CVPGAgentDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_DESTROY()
ON_WM_CLOSE()
ON_COMMAND(ID_AGENTMENU_CLOSE, OnAgentClose)
ON_MESSAGE(WM_TRAYNOTIFY, OnTrayNotification)
END_MESSAGE_MAP()



void CVPGAgentDlg::OnAgentClose()
{
//AfxMessageBox("a");
PostMessage(WM_CLOSE);
}

void CVPGAgentDlg::OnDestroy()
{
CDialog::OnDestroy();

// TODO: Add your message handler code here
m_autoLog.Close();
}

int CVPGAgentDlg::CreateTrayIcon(void)
{
if (!g_TrayIcon1.Create(this, IDR_MENU1, _T("PA Automation Agent"),
m_hIcons[0], WM_TRAYNOTIFY))
{
AfxMessageBox(_T("Failed to create tray icon"), MB_OK |
MB_ICONSTOP);
return -1;
}
//For testing purposes, change the default menu item on the first
icon to be the bottom item on the context menu
g_TrayIcon1.SetDefaultMenuItem(ID_APP_ABOUT, FALSE);

return 0;
}

LRESULT CVPGAgentDlg::OnTrayNotification(WPARAM wParam, LPARAM lParam)
{
//Delegate all the work back to the default implementation in
//CTrayNotifyIcon.
g_TrayIcon1.OnTrayNotification(wParam, lParam);
return 0L;
}
First  |  Prev  | 
Pages: 1 2
Prev: optimization
Next: Lost Mail