|  | 【代码】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 NotifyIconac = 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防火墙关掉,托盘就会弹出一个气泡,点击那个气泡就会弹出“安全中心”窗口,就是用的这个方法。 |