  | 
      
        
          1樓
          巨大八爪鱼
          2012-7-30 09:52
          
          
           
         
        新建一个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);  
       | 
    
    
        | 
      
        
          2樓
          巨大八爪鱼
          2012-7-30 09:53
          
          
           
         
        最终效果。xp下也能显示哦 
 
  
       | 
    
    
        | 
      
        
          3樓
          巨大八爪鱼
          2012-7-30 09:55
          
          
           
         
        在这段代码中,关键是: 
note.cbSize = NOTIFYICONDATA_V2_SIZE; 网上大多数代码都是写的 
//note.cbSize=sizeof(NOTIFYICONDATA); 所以导致了xp下无法弹出气球。  
       | 
    
    
        | 
      
        
          4樓
          巨大八爪鱼
          2012-7-30 09:55
          
          
           
         
        反正记住只需要使用note.cbSize = NOTIFYICONDATA_V2_SIZE; 就能在xp下显示气球了,用不着define什么东西 
       | 
    
    
        | 
      
        
          5樓
          巨大八爪鱼
          2012-7-30 10:00
          
          
           
         
        【vb2008下显示气球的方法】 
Dim ac As NotifyIcon     ac = New NotifyIcon         ac.BalloonTipIcon = ToolTipIcon.Info         ac.Visible = True         ac.BalloonTipText = TextBox2.Text  '这是内容         ac.BalloonTipTitle = TextBox1.Text '这是标题         ac.Icon = Icon         ac.ShowBalloonTip(5000) 
 最终效果:
  
   
       | 
    
    
        | 
      
        
          6樓
          巨大八爪鱼
          2012-7-30 10:01
          
          
           
         
        因为vb2008里面只能用Windows Forms   
       | 
    
    
        | 
      
        
          7樓
          巨大八爪鱼
          2012-7-30 10:01
          
          
           
         
        Windows Forms有一个特大缺点就是不能使用系统风格的菜单。因此我也不想用它 
       | 
    
    
        | 
      
        
          9樓
          巨大八爪鱼
          2012-7-30 11:23
          
          
           
         
        【案例】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防火墙关掉,托盘就会弹出一个气泡,点击那个气泡就会弹出“安全中心”窗口,就是用的这个方法。  
       |