VC程序托盘显示和气泡显示

 

新建一个MFC 对话框程序

添加成员变量   NOTIFYICONDATA m_tnd; 

添加方法

BOOL SetupTrayIcon(HWND hwnd) { //ZeroMemory(&m_tnd, sizeof(NOTIFYICONDATA)); m_tnd.cbSize = sizeof( NOTIFYICONDATA ); m_tnd.hWnd = hwnd;//this->GetSafeHwnd();//所在对话框窗口句柄 m_tnd.uID = IDR_MAINFRAME; m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; //m_tnd.dwInfoFlags = NIIF_USER; m_tnd.uCallbackMessage = WM_LBUTTONDBLCLK; //m_tnd.uTimeout = 3; m_tnd.hIcon = m_hIcon;//需要指定一个图标!这里是所在对话框的图标 wcscpy_s(m_tnd.szTip,_T("我的任务栏程序")); return Shell_NotifyIcon( NIM_ADD, &m_tnd ); } 

 

上面的代码新建一个图标在系统托盘处。

 当推出系统时删除托盘图标

BOOL RemoveTrayIcon() { return Shell_NotifyIcon( NIM_DELETE, &m_tnd ); } 

添加显示气泡方法 

BOOL ShowToolTip(LPCTSTR szMsg,LPCTSTR szTitle,DWORD dwInfoFlags,UINT uTimeout) { m_tnd.cbSize=sizeof(NOTIFYICONDATA); m_tnd.uFlags = NIF_INFO; m_tnd.uVersion = NOTIFYICON_VERSION; m_tnd.uTimeout = uTimeout; m_tnd.dwInfoFlags = dwInfoFlags; wcscpy_s( m_tnd.szInfoTitle, szTitle );//气泡标题 wcscpy_s( m_tnd.szInfo, szMsg );//气泡内容 //wcscpy_s( m_tnd.szTip, _T("tip") ); SetTimer(1, 1000, NULL); return Shell_NotifyIcon( NIM_MODIFY, &m_tnd ); } 

为了让气泡消失,设置一个定时器,过一段时间将气泡的提示信息设为空。就能关闭气泡显示了。

BOOL CloseToolTip() { m_tnd.cbSize=sizeof(NOTIFYICONDATA); m_tnd.uFlags = NIF_INFO; wcscpy_s( m_tnd.szInfo, _T("") );//气泡内容 设置为空即可取消气泡提示 return Shell_NotifyIcon( NIM_MODIFY, &m_tnd ); } 

void OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加控件通知处理程序代码 KillTimer(nIDEvent); CloseToolTip(); } 

 

 

 

 调用方法:

在OnInitDialog调用 SetupTrayIcon(m_hWnd);

在OnClose里调用 RemoveTrayIcon

在某个按钮事件里写ShowToolTip(_T("测试消息"), _T("测试"),NULL,3000);

 

 注意:targetver.h需要修改如下2个定义:

#ifndef WINVER // 指定要求的最低平台是 Windows Vista。 //#define WINVER 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。 #define WINVER 0x0501 #endif #ifndef _WIN32_WINNT // 指定要求的最低平台是 Windows Vista。 //#define _WIN32_WINNT 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。 #define WINVER 0x0501 #endif 

 

 

来源:http://www.cnblogs.com/likwo/archive/2010/02/24/1672870.html

 

 

 

你可能感兴趣的:(VC)