void ::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{// 响应在托盘图标上的单击
if ((wParam == IDR_MAINFRAME)&&(lParam == WM_LBUTTONDOWN))
{
TRACE("11\n");
CMenu menu;
CMenu* pPopup = NULL;
menu.LoadMenu(IDR_MENU_STOCK);
pPopup =menu.GetSubMenu(0);
CPoint  pt ;
::GetCursorPos(&pt);
TRACE("%d:%d\n",pt.x,pt.y);
ASSERT(pPopup != NULL); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y,
this);
}
}
///删除托盘图标, NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=m_hWnd;
tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);

解决方案 »

  1.   

    1 可能是你的回调信息处理有问题2 dwState = NIS_HIDDEN
      

  2.   

    void ::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
    {// 响应在托盘图标上的单击
    if ((wParam == IDR_MAINFRAME)&&(lParam == WM_LBUTTONDOWN))
    {
                    //加上这句话
            ::SetForegroundWindow(m_hWnd); TRACE("11\n");
    CMenu menu;
    CMenu* pPopup = NULL;
    menu.LoadMenu(IDR_MENU_STOCK);
    pPopup =menu.GetSubMenu(0);
    CPoint  pt ;
    ::GetCursorPos(&pt);
    TRACE("%d:%d\n",pt.x,pt.y);
    ASSERT(pPopup != NULL); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y,
    this);
    }
    }
      

  3.   

    托盘问题,需要点击托盘二次,在第二次,才能弹出菜单
    这个解决了,谢谢newsb(newsb) 2 dwState = NIS_HIDDEN
    好象是将图标隐藏啊?不是删除?
      

  4.   

    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_TRAYMESSAGE;
    tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
    ZeroMemory(tnd.szTip, sizeof(tnd.szTip));
    _tcscpy(tnd.szTip, _T("tip"));   //改成你自己的名称
    Shell_NotifyIcon(NIM_DELETE,&tnd);//向任务栏添加图标
      

  5.   

    删除托盘图标应该这样
    重载框架类的ONCLOSE消息
    void CMainFrame::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
    NOTIFYICONDATA tnid; 
    tnid.cbSize=sizeof(NOTIFYICONDATA); 
    tnid.hWnd=this->m_hWnd; 
    tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标 
    Shell_NotifyIcon(NIM_DELETE,&tnid); 
    //退出程序 
    AfxPostQuitMessage(0); 

    CFrameWnd::OnClose();
    }
      

  6.   

    NOTIFYICONDATA nd;
    nd.cbSize = sizeof (NOTIFYICONDATA);
    nd.hWnd = m_hWnd;
    nd.uID = IDR_MAINFRAME;
    nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
    nd.uCallbackMessage = WM_NOTIFYICON;
    nd.hIcon = m_hIcon;
    strcpy(nd.szTip, "SoftPhone");
    Shell_NotifyIcon(NIM_ADD, &nd);
      

  7.   

    Shell_NotifyIcon(NIM_DELETE,&tnid); 
    我都实验成功了,你的怎么会没刷新呢?
      

  8.   

    做了个最简单的程序,两个按钮,一个调用你添加图标的代码
    一个是你删除的代码,没有任何问题,是不是你系统的原因?Ps:  我是Windows 2000,  VC6, sp5
      

  9.   

    那你还是用自定义消息吧:
    #define  WM_MY_MSG  WM_USER  +1000
    void  CMainFrame::OnMyMsg(WPARAM  wparam,LPARAM  lparam )
    {

    UINT uID=(UINT) wparam;
    UINT  uMouseMsg=(UINT) lparam;
    switch   (uMouseMsg )
    {
    case  WM_RBUTTONUP:
    {
    if (uID ==IDR_MAINFRAME)
    {
    CMenu  menu;
    menu.LoadMenu (IDR_MENU1);
    CPoint  pt;
    GetCursorPos(&pt);
    ScreenToClient(&pt);
    //  ShowCursor(true);
    menu.GetSubMenu (0)->TrackPopupMenu (TPM_LEFTALIGN,pt.x ,pt.y ,this);
    }
    }
    break;
    default :
    break;
    }

    }
    然后修改你上面的代码:
    nid.uCallbackMessage =WM_MY_MSG;
    .....
    Shell_NotifyIcon(NIM_ADD, &nd);
    this->ShowWindow(SW_SHOWNOACTIVATE);
      

  10.   

    如果还没解决,我把我做的给你参考一下?
    我的: [email protected]
      

  11.   

    还是没有解决,我的em;[email protected]
    谢谢了!
      

  12.   

    没有收到啊,[email protected]是我的msn,你可以加我!
      

  13.   

    to: linxy2002(阿郎) 
    也给我一份吧
      

  14.   

    不会的,要你Shell_NotifyIcon()删除一下才可以的,否则不会自动消失的
    to:jag1976(明天)
    我不大上MSN的,你给个邮箱,我发给你,[email protected]好象接收不到哦