我的程序退出了,可是托盘图标却还存在,鼠标一碰才消失。。。。。。

AnyStayIsJk 2008-09-18 09:56:35
void CTESTjkView::OnExit()
{
// TODO: 在此添加命令处理程序代码
//MessageBox("Call ok");
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=this->m_hWnd;
tnid.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_DELETE,&tnid);

AfxPostQuitMessage(0);
}
请帮忙贴出解决方法的代码。。。。。。(谢谢)
...全文
899 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
李不爽 2008-09-19
  • 打赏
  • 举报
回复
遇上同样问题

我的程序就是一个托盘程序,没有form界面

当我通过卸载程序卸载这个程序后,快捷方式等有删除了,就是托盘图标并没有消失,
当我点击的时候,由于找不到主程序,就报异常!

与楼主的问题有点不一样!

楼主可以照下面的做法即可

/// <summary>
/// 退出服务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void ExitService(object sender, System.EventArgs e)
{
//隐藏托盘程序中的图标
TrayIcon.Visible = false;
//关闭系统
this.Close();
}
n_yHHy_n 2008-09-18
  • 打赏
  • 举报
回复
Windows刷新的不好。
FireBirdCN 2008-09-18
  • 打赏
  • 举报
回复
BOOL CMainDlg::DestroyWindow()
{
::Shell_NotifyIcon(NIM_DELETE,&m_tnid);
return CDialog::DestroyWindow();

}
enll_2002 2008-09-18
  • 打赏
  • 举报
回复
析构的时候有调用销毁的函数吗?
Shell_NotifyIcon(NIM_DELETE, &m_Nid);
vocanicy 2008-09-18
  • 打赏
  • 举报
回复
不要用AfxPostQuitMessage退出程序
这时相当极端的做法,差不多相当于直接终止进程了
这可能是导致没有正确删除的原因

另外,退出程序还是给主窗口发送WM_CLOSE消息比较好
tvman 2008-09-18
  • 打赏
  • 举报
回复
void CMainFrame::OnDestroy()
{
CFrameWndEx::OnDestroy();

// TODO: Add your message handler code here
Shell_NotifyIcon(NIM_DELETE,&nd);
}

试试
cnzdgs 2008-09-18
  • 打赏
  • 举报
回复
还有一点,你创建和删除是在同一个类中吗?如果在不同类中,this->m_hWnd是不同的。
cnzdgs 2008-09-18
  • 打赏
  • 举报
回复
关键是这段代码要在窗口销毁之前执行,你用IsWindow检查一下窗口句柄,看看是否有效。
AnyStayIsJk 2008-09-18
  • 打赏
  • 举报
回复
我设置断点,验证确实运行了这些代码了。。。。。。
starytx 2008-09-18
  • 打赏
  • 举报
回复
删除的代码就是那样的,所以还得你自己检查退出时是否运行了那些代码?有时非正常退出的程序图标没有删除就是这个原因
hongye8821 2008-09-18
  • 打赏
  • 举报
回复
程序退出前先删除托盘图标
AnyStayIsJk 2008-09-18
  • 打赏
  • 举报
回复
请大家再帮着想想办法呀,在线等。。。。。。。
再次感谢。。。。。。
cnzdgs 2008-09-18
  • 打赏
  • 举报
回复
代码没问题,估计是执行删除代码的时候窗口已经销毁了。
zhinangren 2008-09-18
  • 打赏
  • 举报
回复
我也碰到这个问题!
AnyStayIsJk 2008-09-18
  • 打赏
  • 举报
回复
创建托盘的代码:
NOTIFYICONDATA tnd;
tnd.cbSize=sizeof(NOTIFYICONDATA);
tnd.hWnd=this->m_hWnd;
tnd.uID=IDR_MAINFRAME;
tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.uCallbackMessage=WM_TRAY;
tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
strcpy(tnd.szTip,"接收WEB SERVICE");
Shell_NotifyIcon(NIM_ADD,&tnd);
点“退出”菜单时调用的
cnzdgs 2008-09-18
  • 打赏
  • 举报
回复
创建托盘图标的代码怎么写的?OnExit函数在什么时候被调用?
zhoujianhei 2008-09-18
  • 打赏
  • 举报
回复
确认tnid.hWnd有效。

jerry4711 2008-09-18
  • 打赏
  • 举报
回复
楼主的tnid.uID应该没错吧,或者把这段代码加到MainFrame类中的OnDestroy()里试试看!
oyljerry 2008-09-18
  • 打赏
  • 举报
回复
Shell_NotifyIcon 是否返回成功,否则再调用一次
「已注销」 2008-09-18
  • 打赏
  • 举报
回复
这个有时候是这样的,不知道为什么,我也遇到过,
加载更多回复(8)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧