一个应用程序,专门实现事件的监听并处理事件.我想把她最小化到托盘区,在点击鼠标右键的时候弹出一个菜单,可以对菜单的各项操作,要如何实现啊?就是有点像SQL Server的服务器程序一样.

解决方案 »

  1.   

    www.codeproject.com,www.vckbase.com,www.vchelp.net里都有例子,自己找找吧!
      

  2.   

    see this,can help you:
    http://www.codeproject.com/csharp/trayiconmenu01.asp
      

  3.   

    不好意思,搞错了,看这个:
    http://www.codeproject.com/useritems/system_tray.asp
      

  4.   

    NOTIFYICONDATA myshell;
    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(IDR_MAINFRAME); 
    myshell.hIcon=hicon;
    if(hicon)
    DestroyIcon(hicon);
    char* buf;
    buf=new char [32];
    wsprintf(buf,"%s%s%s","主叫:",m_localip,"  没有呼叫");
    strcpy(myshell.szTip,_T(buf));
    ::Shell_NotifyIcon(NIM_ADD, &myshell);
    上面是添加按钮
    现面是响应消息,这是一个虚函数LRESULT CIPPhoneDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    switch(message)
    {
    case WM_USER + 100:
    if(lParam == WM_LBUTTONDOWN)
    {
    if(!m_IsShow)
    {
    ::AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
    BringWindowToTop();
    m_IsShow = TRUE;
    }
    else
    {
    ::AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
    m_IsShow = FALSE;
    }
    }
    if(lParam == WM_RBUTTONDOWN)
    {
    CMenu popmenu;
    popmenu.LoadMenu(IDR_SAVE_PIC);
    CPoint pos;
    GetCursorPos(&pos);
    CMenu *psub = (CMenu *)popmenu.GetSubMenu(0); 
    psub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,this);
    popmenu.DestroyMenu();

    }
    if(lParam == WM_LBUTTONDBLCLK)
    {
    if(!m_IsShow)
    {
    ::AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
    BringWindowToTop();
    m_IsShow = TRUE;
    }
    else
    {
    ::AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
    m_IsShow = FALSE;
    }
    }
    break;
    case WM_SYSCOMMAND: 
    if(wParam==SC_MINIMIZE)

    AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE); 
    m_IsShow = FALSE;
    }
    break;
    }
    return CDialog::DefWindowProc(message, wParam, lParam);
    }