如何写系统托盘程序

效果图

这主要是用到了一个接口 Shell_NotifyIcon,这个有三个操作,添加,修改,删除


BOOL Engine::ShowBalloonTip(LPCTSTR szMsg, LPCTSTR szTitle, DWORD nType,  DWORD dwInfoFlags /* = NIIF_INFO */, UINT uTimeout /* = 1000 */)
{
	if (ICON_ADD == nType)
	{
		m_nid.cbSize = sizeof(NOTIFYICONDATA);
		m_nid.hWnd = m_hParentWnd;
		m_nid.uID = IDI_SMALL;
		m_nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_SMALL));
		Shell_NotifyIcon(NIM_ADD, &m_nid);
	}
	
	m_nid.cbSize = sizeof(NOTIFYICONDATA);
	m_nid.uFlags = NIF_INFO | NIF_ICON;
	m_nid.uVersion = NOTIFYICON_VERSION;
	m_nid.uTimeout = uTimeout;
	m_nid.dwInfoFlags = dwInfoFlags;
	wsprintfW(m_nid.szInfo, L"%s", szMsg ? szMsg : _T(""));
	wsprintfW(m_nid.szInfoTitle, L"%s", szTitle ? szTitle : _T(""));

	BOOL bFlag = false;
	bFlag = Shell_NotifyIcon(NIM_MODIFY, &m_nid);
	
	if (ICON_DELETE == nType)
	{
		bFlag = Shell_NotifyIcon(NIM_DELETE, &m_nid);
	}

	return bFlag;
}

一.添加图标 NIM_ADD

添加图标主要是NOTIFYICONDATA这个结构体的配置,具体成员变量可以自己百度哈,有的人图标出不来,主要是在

1.uFlags这个参数出问题,如果没有加上NIF_ICON是不会有图标,至于要其他特效自己多参考接口说明

2.LoadIcon这个函数上也有人会不经意出问题,要仔细检查,一个是路径可能出问题,还有就是资源文件里是否存在这个标识符,可以先打开.rc文件查看

二.更改图标NIM_MODIFY

修改提示信息,图标转换,都要经过这个接口

三.删除图标ICON_DELETE

删除图标会很快,这个图标的逗留时间比较短,所以如果你想让效果更明显,最好是加个sleep睡眠时间,但是又会影响进程,所有如果条件允许加入消息队列,由另一个进程去处理等待,这样会比较好

有啥问题来深圳程序交流群550846167

发布了259 篇原创文章 · 获赞 67 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/linjingtu/article/details/88723956
今日推荐