作者共发了9篇帖子。 内容转换:不转换▼
 
点击 回复
853 8
【代码】VC2008+XP系统下显示托盘气球
亮出13cm 十九级
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);

亮出13cm 十九级
2楼 发表于:2012-7-30 09:53

最终效果。xp下也能显示哦

亮出13cm 十九级
3楼 发表于:2012-7-30 09:55

在这段代码中,关键是:

note.cbSize = NOTIFYICONDATA_V2_SIZE;
网上大多数代码都是写的

//note.cbSize=sizeof(NOTIFYICONDATA);
所以导致了xp下无法弹出气球。

亮出13cm 十九级
4楼 发表于:2012-7-30 09:55
反正记住只需要使用note.cbSize = NOTIFYICONDATA_V2_SIZE;
就能在xp下显示气球了,用不着define什么东西
亮出13cm 十九级
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)


最终效果:

 

亮出13cm 十九级
6楼 发表于:2012-7-30 10:01
因为vb2008里面只能用Windows Forms
亮出13cm 十九级
7楼 发表于:2012-7-30 10:01
Windows Forms有一个特大缺点就是不能使用系统风格的菜单。因此我也不想用它
亮出13cm 十九级
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(标题,内容)

亮出13cm 十九级
10楼 发表于:2012-7-30 18:16

补充一下,如果要响应鼠标点击托盘气球的消息,可以在WindowProc函数中(也就是网上说的响应托盘右键菜单的地方),加上:

if (lParam==NIN_BALLOONUSERCLICK)
{

   //这里你自己处理吧
   AfxMessageBox(L"str");
}

 

就可以了。

 

比如把windows防火墙关掉,托盘就会弹出一个气泡,点击那个气泡就会弹出“安全中心”窗口,就是用的这个方法。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:853 回复数:8
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2012-7-30 18:16
精品区:常见问题
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。