|   | 
			  新建一個mfc對話框程序,添加一個按鈕,雙擊後把下面的代碼複製進去: NOTIFYICONDATA note;//note.cbSize=sizeof(NOTIFYICONDATA);
 note.cbSize = NOTIFYICONDATA_V2_SIZE;
 note.hWnd=this->GetSafeHwnd();
 note.uFlags=NIF_ICON|NIF_MESSAGE|NIF_INFO|NIF_TIP;//NIF_INFO必須包含
 note.uID=IDR_MAINFRAME;
 //note.uCallbackMessage=WM_SHELLNOTIFY;
 lstrcpy(note.szTip,_T("內容3"));
 note.dwInfoFlags=NIIF_INFO;
 note.uTimeout=3000;
 lstrcpy(note.szInfo,_T("內容1"));
 lstrcpy(note.szInfoTitle,_T("內容2"));
 note.hIcon=LoadIcon(NULL,IDI_WINLOGO);
 Shell_NotifyIcon(NIM_ADD,¬e);
 | 
                
          |   | 
			  最終效果。xp下也能顯示哦 
 | 
                
          |   | 
			  在這段代碼中,關鍵是: note.cbSize = NOTIFYICONDATA_V2_SIZE;網上大多數代碼都是寫的
 //note.cbSize=sizeof(NOTIFYICONDATA);所以導致了xp下無法彈出氣球。
 | 
                
          |   | 
			  反正記住只需要使用note.cbSize = NOTIFYICONDATA_V2_SIZE;就能在xp下顯示氣球了,用不著define什麼東西
 | 
                
          |   | 
			  【vb2008下顯示氣球的方法】 Dim ac As NotifyIconac = New NotifyIcon
 ac.BalloonTipIcon = ToolTipIcon.Info
 ac.Visible = True
 ac.BalloonTipText = TextBox2.Text  '這是內容
 ac.BalloonTipTitle = TextBox1.Text '這是標題
 ac.Icon = Icon
 ac.ShowBalloonTip(5000)
 最終效果:
     | 
                
          |   | 
			  因為vb2008裡面只能用Windows Forms   | 
                
          |   | 
			  Windows Forms有一個特大缺點就是不能使用系統風格的菜單。因此我也不想用它             | 
                
          |   | 
			  【案例】VC++中先顯示托盤圖標,再顯示氣球的案例nid.cbSize=NOTIFYICONDATA_V2_SIZE;
 nid.hWnd=m_hWnd;
 nid.uID=IDR_MAINFRAME;
 nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP|NIF_INFO;
 //nid.uCallbackMessage=WM_SHOWTASK;
 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); //設置圖標
 wcscpy_s(nid.szTip,L"ddddddd"); //圖標提示信息
 //啟動時不顯示氣球
 lstrcpy(nid.szInfo,_T(""));
 lstrcpy(nid.szInfoTitle,_T(""));
 Shell_NotifyIcon(NIM_ADD,&nid);
 
 然後添加一個函數,用來顯示氣球
 void CMainFrame::ShowBalloon(CString title, CString content, unsigned int timeout, DWORD icon)
 {
 lstrcpy(nid.szInfo,content);
 lstrcpy(nid.szInfoTitle,title);
 nid.uTimeout=timeout;
 nid.dwInfoFlags=icon;
 Shell_NotifyIcon(NIM_MODIFY,&nid);
 }
 void CMainFrame::ShowBalloon(CString title, CString content)
 {
 ShowBalloon(title,content,5000,NIIF_INFO);
 }
 這樣就可以先顯示托盤圖標,然後顯示氣球了
 調用時直接用ShowBalloon(標題,內容)
 | 
                
          |   | 
              
                10楼                巨大八爪鱼
                2012-7-30 18:16
                                                  
			  補充一下,如果要響應滑鼠點擊托盤氣球的消息,可以在WindowProc函數中(也就是網上說的響應托盤右鍵菜單的地方),加上: if (lParam==NIN_BALLOONUSERCLICK){
    //這裡你自己處理吧AfxMessageBox(L"str");
 }
   就可以了。   比如把windows防火牆關掉,托盤就會彈出一個氣泡,點擊那個氣泡就會彈出「安全中心」窗口,就是用的這個方法。 |