| 
          【代码】VC2008+XP系统下显示托盘气球 | 
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
            
              新建一个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);              
                       | 
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
            
              最终效果。xp下也能显示哦 
               
             | 
|
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
            
              在这段代码中,关键是: 
note.cbSize = NOTIFYICONDATA_V2_SIZE; 网上大多数代码都是写的 
//note.cbSize=sizeof(NOTIFYICONDATA); 所以导致了xp下无法弹出气球。              
             | 
|
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
             
              反正记住只需要使用note.cbSize = NOTIFYICONDATA_V2_SIZE; 就能在xp下显示气球了,用不着define什么东西             
             | 
|
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
            
              【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) 
 最终效果:
  
               
             | 
|
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
            
              因为vb2008里面只能用Windows Forms               
             | 
|
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
             
              Windows Forms有一个特大缺点就是不能使用系统风格的菜单。因此我也不想用它             
             | 
|
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
            
              【案例】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(标题,内容)
               
             | 
|
        
                
          
            
                         亮出13cm 二十级              | 
          
            
            
            
              补充一下,如果要响应鼠标点击托盘气球的消息,可以在WindowProc函数中(也就是网上说的响应托盘右键菜单的地方),加上: 
if (lParam==NIN_BALLOONUSERCLICK) { 
   //这里你自己处理吧    AfxMessageBox(L"str"); } 
  
就可以了。 
  
比如把windows防火墙关掉,托盘就会弹出一个气泡,点击那个气泡就会弹出“安全中心”窗口,就是用的这个方法。              
             | 
|