設置 | 登錄 | 註冊

目前共有9篇帖子。

【代碼】VC2008+XP系統下顯示托盤氣球

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,&note);

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

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。