用Shell_NotifyIcon(NIM_ADD, &m_notifyicon)创建了托盘图标,但当MOuse指在该图标上方时,它便消失了,何解?

解决方案 »

  1.   

    可能是
    m_notifyicon.hWnd 没有设置或虽然设置了,但无效。
      

  2.   

    myshell.cbSize=sizeof(NOTIFYICONDATA);
    myshell.hWnd=this->m_hWnd;
    myshell.uID=IDR_MAINFRAME;
    myshell.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
    myshell.uCallbackMessage=WM_USER+100;
    HICON hicon=AfxGetApp()->LoadIcon(RESOURCE); 
    myshell.hIcon=hicon;
    if(hicon)
    DestroyIcon(hicon);
    char* buf;
    buf=new char [64];
    wsprintf(buf,"%s",tip);
    strcpy(myshell.szTip,_T(buf));
    switch(flag)
    {
    case 0:
    ::Shell_NotifyIcon(NIM_ADD, &myshell);
    break;
    case 1:
    ::Shell_NotifyIcon(NIM_MODIFY, &myshell);
    break;
    case 2:
    ::Shell_NotifyIcon(NIM_DELETE, &myshell);
    break;
    default :
    break;
    }
      

  3.   

    图标建立后,不用时要用API将它删除!
      

  4.   

    第一.你的应用程序已经退出。
    第二.你用代码删除了。
    第三.owner无效。
      

  5.   

    检查进程中是否还有你的程序?是不是真的关了?下面是我的关闭函数。void CTrayDlg::OnClose() 
    {
    // TODO: Add your command handler code here  NOTIFYICONDATA tnid;
      tnid.cbSize=sizeof(NOTIFYICONDATA);
      tnid.hWnd=AfxGetMainWnd()->m_hWnd;
      tnid.uID=IDR_MAINFRAME;
      Shell_NotifyIcon(NIM_DELETE,&tnid);  CDialog::OnClose();
      this->PostMessage(WM_CLOSE,0,0);
    }我想你可能是把这关闭写错地方了!