![](image/doc.gif)
nscboy:修改一下你的OnCancel函数就可以正确的删除托盘图标了
修改代码如下:
void CAlertDlg::OnCancel()
{
// TODO: Add extra cleanup here
// 释放定时器
KillTimer(1);
// 将图标从系统托盘中删除
NOTIFYICONDATA nd;
nd.cbSize = sizeof (NOTIFYICONDATA);
nd.hWnd = m_hWnd;
nd.uID = IDI_ICON;
nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nd.uCallbackMessage = WM_NOTIFYICON;
nd.hIcon = m_hIcon;
Shell_NotifyIcon(NIM_DELETE, &nd);
CDialog::OnCancel();
}
下面提两点建议;
1将NOTIFYICONDATA nd;作为成员变量
2:在消息响应函数OnDestroy()中进行图标删除工作
因为如果你使用关闭按钮或者是OnOK进行关闭程序时OnCancel中的代码将不工作.
(发表于2004-2-2 13:12:00)
![](image/doc.gif)
Abbey:谢谢!我找了很久也没找到解决这个Bug的那篇文章,前两天才有人说在执行Shell_NotifyIcon(NIM_DELETE, &nd);时要在nd中给中图标的ID才能解决,可惜我也没有VC++来试。因此感谢你如此的讲解。我会试试在VC#下实现这类程序。
不过目前我还在熟悉和掌握C#的语法,还未开始真正的Windows Form编程。
(发表于2004-2-2 20:21:00)
![](image/doc.gif)
wyq521003:NOTIFYICONDATA nd;设成全局变量,然后就可以了
(发表于2005-6-13 15:02:00)
![](image/doc.gif)
china_qd:在程序退出后图标仍在托盘区显示,要把鼠标在图标上面过一下才会消失。
在DestroyWindow()中去除系统托盘图标
(发表于2008-3-12 11:25:00)
..........................................................................
--------------------next---------------------
阅读(160) | 评论(0) | 转发(0) |