您的位置:首页 > 其它

添加、移除托盘图标以及气泡提示

2017-07-09 23:54 423 查看

添加、移除托盘图标以及气泡提示

在头文件中声明NOTIFYICONDATA类型的m_tray结构,然后再类向导中添加WM_NOTIFYICON消息的处理函数,使用 Shell_NotifyIcon 操作托盘图标。

.h

public:
BOOL AddRemoveTray(BOOL flag);
NOTIFYICONDATA m_tray;
BOOL ShowBubbleTip(LPCTSTR lpTitle, LPCTSTR lpText, DWORD infoflags);
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg LRESULT OnNotifyicon(WPARAM wParam, LPARAM lParam);


.cpp

BEGIN_MESSAGE_MAP(CTrayAndBubbleDlg, CDialogEx)
ON_WM_PAINT()
ON_MESSAGE(WM_NOTIFYICON, &CTrayAndBubbleDlg::OnNotifyicon)
ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()

// CTrayAndBubbleDlg 消息处理程序
BOOL CTrayAndBubbleDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);         // 设置大图标
SetIcon(m_hIcon, FALSE);        // 设置小图标

AddRemoveTray(TRUE);

return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

BOOL CTrayAndBubbleDlg::AddRemoveTray(BOOL flag)
{
if (flag)
{
//static const GUID ic_guid = { 0x84d049ff, 0xb769, 0x434e, { 0x9f, 0x53, 0xbc, 0xf2, 0x98, 0x48, 0x25, 0xa9 } };
// ZeroMemory(&m_tray,sizeof(m_tray));
m_tray.cbSize = sizeof(NOTIFYICONDATA);
m_tray.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));
// (HICON)LoadImage(AfxGetInstanceHandle(),IDI_TRAY_ICON,IMAGE_ICON,0,0,LR_LOADFROMFILE);;
m_tray.hWnd = m_hWnd;
StringCchCopy(m_tray.szTip, sizeof(m_tray.szTip), _T("Test application"));
m_tray.uCallbackMessage = WM_NOTIFYICON;
m_tray.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_tray.uID = IDI_ICON1;
//m_tray.uFlags |= NIF_GUID;
//m_tray.guidItem = ic_guid;
int count = 30;
while (count > 0)
{
if (Shell_NotifyIcon(NIM_ADD, &m_tray) == FALSE)//添加
{
Shell_NotifyIcon(NIM_DELETE, &m_tray);
Sleep(100);
count--;
continue;
}
else
return TRUE;
}
return FALSE;
}
else
{//remove
int count = 10;
while (count > 0)
{
if (Shell_NotifyIcon(NIM_DELETE, &m_tray) == FALSE)//移除
{
Sleep(50);
count--;
continue;
}
else
return TRUE;
}
return FALSE;
}
}

BOOL CTrayAndBubbleDlg::ShowBubbleTip(LPCTSTR lpTitle, LPCTSTR lpText, DWORD infoflags)//气泡
{
m_tray.cbSize = sizeof(NOTIFYICONDATA);
m_tray.uFlags |= NIF_INFO;
m_tray.uTimeout = 10 * 1000;
m_tray.dwInfoFlags = infoflags;
m_tray.uVersion = NOTIFYICON_VERSION;
StringCchCopy(m_tray.szInfoTitle, sizeof(m_tray.szTip), lpTitle);
StringCchCopy(m_tray.szInfo, sizeof(m_tray.szTip), lpTitle);
return Shell_NotifyIcon(NIM_MODIFY, &m_tray);
}

afx_msg LRESULT CTrayAndBubbleDlg::OnNotifyicon(WPARAM wParam, LPARAM lParam)
{
UINT nID = (UINT)wParam;
UINT uMouseMsg = (UINT)lParam;

switch (nID)
{
case IDI_ICON1:
{
if (uMouseMsg == WM_RBUTTONDOWN)//退出
{
AddRemoveTray(FALSE);
exit(0);
}
else if (uMouseMsg == WM_LBUTTONDOWN)//显示气泡
{
ShowBubbleTip(_T("ShowBubbleTip Title"), _T("ShowBubbleTip Context."), NIIF_INFO);
}
}
break;
default:
return 0;
}
return 0;
}


代码链接:

VS2015工程:http://download.csdn.net/detail/yangyang031213/9893384
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: