MFC添加系统托盘图标

MFC添加系统托盘图标 | 火苗999℃的博客

先在dlg.cpp中定义两个宏

#include <Dbt.h>
#define WM_SYSTEMTRAY			WM_USER + 1 // 托盘图标消息绑定
#define MY_BACKGROUNDER_DLG		WM_USER + 2 // 后台运行按键消息


在dlg.h中添加变量

NOTIFYICONDATA m_nid;

NOTIFYICONDATA结构定义:(具体解释可自行百度)

typedef struct _NOTIFYICONDATA {
DWORD cbSize; // 结构体的大小,以字节为单位。
HWND hWnd;    // 窗口的句柄
UINT uID;     // 应用程序定义的任务栏图标的标识符
UINT uFlags;
UINT uCallbackMessage; // 应用程序定义的消息标示
HICON hIcon;			// 增加、修改或删除的图标的句柄
TCHAR szTip[64];		// 指向一个以\0结束的字符串的指针。
DWORD dwState;		    // 图标的状态
DWORD dwStateMask;		// 指明dwState成员的那些位可以被设置或者访问
TCHAR szInfo[256];		// 指向一个以\0结束的字符串的指针,字符串的内容为气球提示内容
union {					// 和uVersion成员为联合体。uTimeout表示气球提示超时的时间
UINT uTimeout;
UINT uVersion;
};
TCHAR szInfoTitle[64];	// 指向一个以\0结束的字符串的指针。字符串的内容为气球提示的标题
DWORD dwInfoFlags;		// 设置此成员用来给气球提示框增加一个图标。
GUID guidItem;
} NOTIFYICONDATA, *PNOTIFYICONDATA;

在OnInitDialog()中初始化m_nid;

    m_nid.cbSize = sizeof( NOTIFYICONDATA );
    m_nid.hWnd = m_hWnd; 
    m_nid.uID = IDR_MAINFRAME; 
    m_nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    m_nid.uCallbackMessage = WM_SYSTEMTRAY;    //自定义消息
    m_nid.hIcon = m_hIcon;                                               
    strcpy_s(m_nid.szTip, "U盘自动更新程序");

重写WindowProc函数;

LRESULT CUDiskDetectionDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: 在此添加专用代码和/或调用基类
	if (WM_SYSTEMTRAY == message)
	{
		ShowSystemTrary(wParam, lParam);
	}
	else if (MY_BACKGROUNDER_DLG == message)
	{
		::Shell_NotifyIcon(NIM_ADD, &m_nid); // 显示托盘图标。
		this->ShowWindow(FALSE); //  隐藏窗体
	}
	return CDialog::WindowProc(message, wParam, lParam);
}


ShowSystemTrary函数:

BOOL CUDiskDetectionDlg::ShowSystemTrary(WPARAM wParam, LPARAM lParam)
{
	if (lParam == WM_LBUTTONDBLCLK)
	{  
		ShowWindow(SW_SHOWNORMAL); // 用最近的大小和位置显示
		::Shell_NotifyIcon(NIM_DELETE, &m_nid);
	}
	if (lParam == WM_RBUTTONDOWN)
	{  
		//右击弹出托盘菜单
		CMenu menu;
		menu.LoadMenu(IDR_MENU_QUIT);
		CMenu *pPopUp=menu.GetSubMenu(0);
		CPoint pt; 
		GetCursorPos(&pt); 
		SetForegroundWindow(); 
		pPopUp->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this); 
	}
	return 0;
}


后台运行按键加入代码:

    SendMessage(MY_BACKGROUNDER_DLG);

增加的退出菜单增加代码:

    SendMessage(WM_CLOSE);
    ::Shell_NotifyIcon(NIM_DELETE, &m_nid);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值