如提!

解决方案 »

  1.   

    .h中
    NOTIFYICONDATA m_tnid;
    BOOL AddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip);
    BOOL DeleteIcon(HWND hwnd, UINT uID);.cpp
    BOOL CXXXDlg::AddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip) 

        BOOL res; 
        m_tnid.cbSize = sizeof(NOTIFYICONDATA); 
    m_tnid.hWnd = hwnd; 
        m_tnid.uID = uID;     
    m_tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; 
        m_tnid.uCallbackMessage = WM_LIBEN; 
    m_tnid.hIcon = hicon; 
        if (lpszTip) 
    lstrcpyn(m_tnid.szTip, lpszTip, sizeof(m_tnid.szTip)); 
        else         
    m_tnid.szTip[0] = '\0'; 
    res = Shell_NotifyIcon(NIM_ADD, &m_tnid); 
    if (hicon) 
            DestroyIcon(hicon); 
    return res; 

    BOOL CXXXDlg::DeleteIcon(HWND hwnd, UINT uID) 
    {
    BOOL res; 
    m_tnid.cbSize = sizeof(NOTIFYICONDATA); 
        m_tnid.hWnd = hwnd;
    m_tnid.uID = uID; 
        res = Shell_NotifyIcon(NIM_DELETE, &m_tnid); 
    return res; 

      

  2.   

    http://www.codeproject.com/shell/cjbtaskbarapplet.asp
    http://www.codeproject.com/shell/systemtray.asp
      

  3.   

    调用:
    int CXXXDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CDialog::OnCreate(lpCreateStruct) == -1)
    return -1;

    // TODO: Add your specialized creation code here
    HICON theIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
    AddIcon(GetSafeHwnd(),IDR_MAINFRAME, theIcon, _T("测试图标"),FALSE);

    return 0;
    }
      

  4.   

    在程序退出时使用
    DeleteIcon( GetSafeHwnd(),IDR_MAINFRAME);
    释放图标
      

  5.   

    1LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(message==WM_USER )
    {
    if(lParam==WM_RBUTTONDOWN)
    {
    CMenu menu,*pSubMenu;
    menu.LoadMenu(IDR_MENU1);
    pSubMenu=menu.GetSubMenu(m_idIcon);
    POINT pt;
    GetCursorPos(&pt);
    pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,pt.x,pt.y,this);
    }
    }
    return CFrameWnd::WindowProc(message, wParam, lParam);
    }2 m_nid.cbSize=sizeof(NOTIFYICONDATA);
    m_nid.hWnd=m_hWnd;
    m_nid.uID=0;
    m_nid.uCallbackMessage=WM_USER;
    m_nid.hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
    ::lstrcpy(m_nid.szTip,"Hello");
    m_nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
    //以上为初始化结构
    m_idIcon=0;
    ::Shell_NotifyIcon(NIM_ADD,&m_nid); //加图标,并在析构函数中删除
    ::DestroyIcon(m_nid.hIcon);
    对了,还要做一个菜单 IDM_SHOW
    void CMainFrame::OnShow() 
    {
    // TODO: Add your command handler code here
    ShowWindow(SW_SHOW);

    }
    void CMainFrame::OnHide() 
    {
    // TODO: Add your command handler code here
    ShowWindow(SW_HIDE);

    }void CMainFrame::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    if(m_idIcon==0)
    {
    m_nid.hIcon=AfxGetApp()->LoadIcon(IDI_ICON2);
    m_idIcon=1;
    }
    else 
    {
    m_nid.hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1));
    m_idIcon=0;
    }
    ::Shell_NotifyIcon(NIM_MODIFY,&m_nid);
    ::DestroyIcon(m_nid.hIcon);


    CFrameWnd::OnTimer(nIDEvent);
    }
    CREATE 中  SetTimer(0,2000,NULL);
      

  6.   

    最后响应鼠标消息,这需要自己手工添加一个消息如WM_LIBEN(在AddIcon中的回调消息)LRESULT CXXXDlg::OnLiben( WPARAM wParam, LPARAM lParam )
    {
    UINT nID;
    UINT uMouseMsg; 
    nID = (UINT)wParam;
        uMouseMsg = (UINT) lParam;  if (uMouseMsg == WM_LBUTTONDBLCLK) 
    {
                  //当左键双击时
    }
    else if (uMouseMsg == WM_RBUTTONUP)
    {
                  //当右键单击时
    } return 1;
    }
      

  7.   

    专门的掩饰程序要不要?[email protected]
      

  8.   

    在MSDN里面的索引里输入:Taskbar
    你就会明白你该做什么了。