|
【代碼】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防火牆關掉,托盤就會彈出一個氣泡,點擊那個氣泡就會彈出「安全中心」窗口,就是用的這個方法。
|
|