Chinaunix首页 | 论坛 | 博客
  • 博客访问: 456122
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 17:02:16

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)

Abbey:谢谢!我找了很久也没找到解决这个Bug的那篇文章,前两天才有人说在执行Shell_NotifyIcon(NIM_DELETE, &nd);时要在nd中给中图标的ID才能解决,可惜我也没有VC++来试。因此感谢你如此的讲解。我会试试在VC#下实现这类程序。
不过目前我还在熟悉和掌握C#的语法,还未开始真正的Windows Form编程。
(发表于2004-2-2 20:21:00)

wyq521003:NOTIFYICONDATA nd;设成全局变量,然后就可以了
(发表于2005-6-13 15:02:00)

china_qd:在程序退出后图标仍在托盘区显示,要把鼠标在图标上面过一下才会消失。

在DestroyWindow()中去除系统托盘图标
(发表于2008-3-12 11:25:00)

..........................................................................
--------------------next---------------------

阅读(160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~