我在弄一个客户端程序,想实现像qq那样有陌生人请求加为好友时候,在托盘区闪动图标,并响应鼠标双击事件,不知如何实现,请各位大侠指点!谢了,先!

解决方案 »

  1.   


    添加托盘图标
    m_tnid.cbSize = sizeof(NOTIFYICONDATA);
    m_tnid.hWnd   = this->GetSafeHwnd();
    m_tnid.uID    = IDR_MAINFRAME;   //图标的ID
    m_tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
    m_tnid.uCallbackMessage = WM_NOTIFYICON;   //自定义通告消息
    strcpy(m_tnid.szTip, "应用程序名称...");
    m_tnid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);  //使用程序图标
    Shell_NotifyIcon(NIM_ADD, &m_tnid);删除图标
    m_tnid.cbSize = sizeof(NOTIFYICONDATA);
    m_tnid.hWnd = this->GetSafeHwnd();
    Shell_NotifyIcon(NIM_DELETE, &m_tnid);添加消息响应
    ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)LRESULT CMainDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
    {
    UINT uMouseMsg = (UINT)lParam; switch(uMouseMsg)
    {
    case WM_LBUTTONDBCLK:  //左键双击
    break;
            case WM_LBUTTONDOWN:   //左键单击
    break;
    case WM_RBUTTONUP:     //右键单击
    break;
    default:
    break;
    } return 0;
    }闪动图标就是用定时器不停的换图标
      

  2.   

    托盘使用函数Shell_NotifyIcon
    楼上是正解
      

  3.   

    单托盘显示图标1的时候 显示出窗体 this->ShowWindow();
    单托盘显示图标2的时候 MessageBox(“大幅得分”);楼上只能实现托盘打开缩小和关闭窗体吧
      

  4.   

    托盘编程
    http://www.vckbase.com/document/viewdoc/?id=492
    http://www.vckbase.com/document/viewdoc/?id=495
    http://www.vckbase.com/document/viewdoc/?id=498
    闪动:无非就是用个定时器来循环设置不同的图标而已。
      

  5.   

    这样修改图标都不行
    void CAtaDlg::OnButton1() 
    {
    nid.uID=IDI_ICON1;//加载另一个图标资源 
    nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));      
    Shell_NotifyIcon(NIM_MODIFY,&nid);//修改托盘图标 }void CAtaDlg::toTray()
    {
    nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); 
    nid.hWnd=this->m_hWnd; 
    nid.uID=IDR_MAINFRAME; 
    nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; 
    nid.uCallbackMessage=WM_SHOWTASK; 
    nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 
    strcpy(nid.szTip,"这是个测试程序");  
    Shell_NotifyIcon(NIM_ADD,&nid);  // 在托盘区添加图标 
    }
      

  6.   

    托盘:
    #define WM_TRARMESSAGE                  201NOTIFYICONDATA m_traydata;//成员变量
    m_traydata.cbSize = sizeof(NOTIFYICONDATA);
    m_traydata.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_traydata.hWnd = m_hWnd;
    char  *m_str = "系统管理";
    strncpy(m_traydata.szTip,m_str,strlen(m_str)+1);//strlen +1表示将空字符拷贝到目标字符串中
    m_traydata.uCallbackMessage = WM_TRARMESSAGE;
    m_traydata.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
    afx_msg void OnTrayMessage(WPARAM wParam, LPARAM lParam);
    void XXX::OnTrayMessage(WPARAM wParam, LPARAM lParam)
    {
    if (lParam == WM_LBUTTONDBLCLK)
    {
    ShowWindow(SW_RESTORE);

    }
    else if (lParam == WM_RBUTTONDOWN)
    {
    CPoint m_point;
    ::GetCursorPos(&m_point);
    CMenu m_popmenu;
    m_popmenu.LoadMenu(IDR_MAINFRAME);//菜单ID
    CMenu* m_submenu = m_popmenu.GetSubMenu(0);

    m_submenu->TrackPopupMenu(TPM_LEFTBUTTON |TPM_LEFTALIGN ,m_point.x,m_point.y,this);

    } }
    响应WM_SYSCOMMAND
    void XXXX::OnSysCommand(UINT nID, LPARAM lParam) 
    {
    // TODO: Add your message handler code here and/or call default
    if ((nID & 0xFFF0) == SC_MINIMIZE )//最小化
    {
    ShowWindow(SW_HIDE);
    Shell_NotifyIcon(NIM_ADD,&m_traydata);//添加系统托盘
    return;
    } 。。
    }
      

  7.   

    单托盘显示图标1的时候 显示出窗体 this->ShowWindow(); 
    单托盘显示图标2的时候 MessageBox(“大幅得分”); 
    想实现上面功能要代码的找我 466191942