windows托盤程式和泡泡提示簡單攻略

來源:互聯網
上載者:User

 很多初學MFC的人對於系統托盤程式和泡泡提示很好奇,但卻有種望而生畏的感覺,其實只需要以下3個函數和一個自訂訊息和訊息處理函數就夠了.
我們先來認識一下這幾個函數

BOOL AddToTray();//添加托盤表徵圖
void RemoveFromTray();//移除托盤表徵圖
BOOL ShowBalloonTip(LPCTSTR szMsg,LPCTSTR szTitle,

                                    UINT uTimeout, DWORD dwInfoFlags);//顯示泡泡提示

#define   WM_TRAYMENU   WM_USER+3001//自訂訊息
ON_MESSAGE(WM_TRAYMENU,OnTrayMenu)//訊息處理
afx_msg void OnTrayMenu(WPARAM wParam,LPARAM lParam);//訊息處理函數

這幾個函數都是在MFC 主架構類中定義的:

  1. BOOL CMainFrame::AddToTray()//初始化主架構時調用
  2. {
  3.     nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//NOTIFYICONDATA nid;
  4.                                    //   NOTIFYICONDATA結構請參考MSDN
  5.     nid.hWnd=this->m_hWnd;
  6.     nid.uID=IDR_MAINFRAME;
  7.     nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
  8.     nid.uCallbackMessage=WM_TRAYMENU;//訊息名
  9.     nid.hIcon=LoadIcon(AfxGetInstanceHandle(),
  10.                        MAKEINTRESOURCE(IDR_MAINFRAME));
  11.     sprintf(nid.szTip,"我的程式名");
  12.     Shell_NotifyIcon(NIM_ADD,&nid);//添加托盤表徵圖
  13.     return TRUE;
  14. }
  15. void CMainFrame::RemoveFromTray()//在銷毀的時候調用,
  16.                    //否則程式意外退出後需要滑鼠移上去托盤表徵圖才會消失
  17. {
  18.     nid.uFlags = 0;
  19.     Shell_NotifyIcon(NIM_DELETE, &nid);//移除托盤表徵圖
  20. }
  21. /*例如:ShowBalloonTip("歡迎登入","我的程式名",4000,NIIF_INFO);*/
  22. BOOL CMainFrame::ShowBalloonTip(LPCTSTR szMsg,LPCTSTR szTitle, UINT uTimeout, DWORD dwInfoFlags)
  23. {
  24.  nid.cbSize=sizeof(NOTIFYICONDATA);
  25.  nid.uFlags = NIF_INFO;//提示類型 ,用於顯示泡泡左上方不同表徵圖,
  26.                            //另外還有NIIF_ERROR等
  27.  nid.uTimeout = uTimeout;//提示時間
  28.  nid.dwInfoFlags = dwInfoFlags;
  29.  strcpy(nid.szInfo,szMsg ? szMsg : _T(""));//提示資訊
  30.  strcpy(nid.szInfoTitle,szTitle ? szTitle : _T(""));//提示標題
  31.  return Shell_NotifyIcon(NIM_MODIFY, &nid);
  32. }
  33. /*響應在托盤上的動作*/
  34. void CMainFrame::OnTrayMenu(WPARAM wParam,LPARAM lParam)
  35. {
  36.  if(wParam!=IDR_MAINFRAME)
  37.   return ;
  38.     switch(lParam)
  39.     {
  40.  case WM_RBUTTONUP://右鍵起來時彈出捷徑功能表
  41.   {
  42.    
  43.    POINT point;
  44.    ::GetCursorPos(&point);//得到滑鼠位置
  45.    CMenu menu;
  46.    menu.LoadMenu(IDR_MENU_TRAY);//你的菜單資源
  47.    CMenu* file_menu = menu.GetSubMenu(0);    
  48.    ASSERT(file_menu);
  49.    
  50.    this->SetForegroundWindow();
  51.    file_menu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, 
  52.     point.y, this); 
  53.    menu.DestroyMenu();//資源回收    
  54.   }
  55.   break;
  56.     case WM_LBUTTONUP://單擊左鍵的處理
  57.   {
  58.    ShowWindow(SW_SHOW);//簡單的顯示主視窗,為了使托盤程式比較專業,
  59.                           //最小化時進行了ShowWindow(SW_HIDE);
  60.   }
  61.   break;
  62.     }
  63. }

將這3個函數在你的MainFrame.h 和.cpp中定義,聲明WM_TRAYMENU並添加定義訊息處理函數然後在初始化主架構時調用AddToTray(),銷毀的時候調用RemoveFromTray(),需要提示的時候調用ShowBalloonTip(...)。

 

補充一下:泡泡提示需要IE5以上的支援,也就是說,你的程式必須運行於高於或等於IE5版本的Windows系統上;

相應的你的開發包也應該使用支援IE5以上的SDK,如果你是使用的是VC6,那很可能需要安裝一個sdk如xp sp2 sdk

這個可以在很多地方下載到,安裝好後記得把include目錄所在位置加到你的vc6的搜尋路徑中,而且需要排到首位。

如:E:/XP_SDK_SP2/INCLUDE

 

(完)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.