如何为系统托盘内的图标弹出的菜单编写代码?????

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=1448
      

  2.   

    http://www.vckbase.com/document/finddoc.asp?keyword=%CD%D0%C5%CC
      

  3.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell_int_programming/taskbar.asp
      

  4.   

    1、在XXDlg.CPP文件头部加入#define WM_NOTIFYICONWM_USER+5   
    NOTIFYICONDATA nd;
    2、在程序的初始化中加入下面代码 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, "我的托盘");
    Shell_NotifyIcon(NIM_ADD, &nd);      
    3、在程序的退了函数中加入删除托盘图标语句  Shell_NotifyIcon(NIM_DELETE, &nd); 
      

  5.   

    、建立菜单对应的函数
    void CbackdropDlg::OnShow()
    {
       ShowWindow( SW_SHOWNORMAL);//恢复正常显示
    }void CbackdropDlg::OnExit()
    {
       ::PostQuitMessage(0); //退出
    }
    void CbackdropDlg::OnHide()
    {
       ShowWindow(SW_HIDE);//隐藏
    }void CbackdropDlg::OnMin()
    {
       ShowWindow(SW_SHOWMINIMIZED);//最小化
    }三、添加响应函数  1、在类中加入托盘消息响应函数 LONG CbackdropDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)      
    2、手中添加消息映射 //}}AFX_MSG_MAP
    ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)//手工添加消息映射
    END_MESSAGE_MAP()       
    3、在托盘消息响应函数中添加代码 LONG CbackdropDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
    {
    // 响应在托盘图标上的单击
    //wParam中是响应消息的图标ID,lParam中则是Windows的消息
    // The backdrop icon sent us a message.  Let''s see what it is
        switch ( lParam )
        {
    case WM_RBUTTONDOWN:
    {
        // 用户在托盘图标上单击鼠标右键,弹出菜单
    CMenu pMenu;
    if (pMenu.LoadMenu(IDR_MENU1))
    {
    CMenu* pPopup = pMenu.GetSubMenu(0);
    ASSERT(pPopup != NULL);
    CPoint Point;
    if(IsIconic()) pPopup->EnableMenuItem(IDC_MIN,MF_BYCOMMAND | 
                                 MF_DISABLED | MF_GRAYED);
    if (IsWindowVisible())// 根据对话框窗口的状态对相关菜单项使能
    {
    if(!IsIconic())
    pPopup->EnableMenuItem(IDC_SHOW,MF_BYCOMMAND | 
                           MF_DISABLED | MF_GRAYED);
    }
    else
    pPopup->EnableMenuItem(IDC_HIDE,MF_BYCOMMAND | 
                                    MF_DISABLED | MF_GRAYED);
    if (bkbmp)// 根据对话框背景图状态改变菜单名称
    pMenu.ModifyMenu(IDC_FIX,MF_STRING,IDC_FIX,"变化背景");
    else
    pMenu.ModifyMenu(IDC_FIX,MF_STRING,IDC_FIX,"固定背景)");
    // 确定鼠标位置以便在该位置附近显示菜单
    GetCursorPos( &Point );
    SetForegroundWindow();
    pPopup->TrackPopupMenu(
    TPM_LEFTALIGN | TPM_RIGHTBUTTON,
    Point.x, Point.y, this);?
    }
    }
    break;
    case WM_LBUTTONDBLCLK:
    case WM_LBUTTONDOWN:
    // OnShow();
    break;
        }
        return 0;
    }