实现托盘

这篇博客介绍了如何在VC++中实现任务栏托盘功能,包括创建菜单、添加自定义消息处理、封装托盘函数以及响应消息。通过示例代码详细展示了如何使用NOTIFYICONDATA结构和Shell_NotifyIcon函数来添加和删除托盘图标。
部署运行你感兴趣的模型镜像

首先 
新建一个muen菜单  id 为 IDR_MUEN2

添加两个 子选项 一个 是显示 一个 是退出  还可以自己设定 

然后给两个子选项添加事件处理 注意选择要给哪一个Dlg添加事件
 
要注意选择
void CBBSDlg::OnMenuShow()
{
	ShowWindow(SW_RESTORE);
	TrayMyIcon(FALSE);
	// TODO: 在此添加命令处理程序代码
}
和
void CBBSDlg::OnMenuExit()
{
	// TODO: 在此添加命令处理程序代码
	TrayMyIcon(FALSE);
	CBBSDlg::OnCancel();
}


然后再类向导选择消息 添加自定义消息
 
我的消息设置为WM_TRAYICON_MSG 的 
处理消息名称为 OnTrayiconMsg

然后加上
#define WM_TRAYICON_MSG (WM_USER+100)//自定义消息


afx_msg LRESULT CBBSDlg::OnTrayiconMsg(WPARAM wParam, LPARAM lParam)
{
	switch(lParam)
	{
	case WM_RBUTTONUP:
		{
			CMenu mMenu, *pMenu = NULL;
			CPoint pt;
			mMenu.LoadMenu(IDR_MENU2);
			pMenu = mMenu.GetSubMenu(0);
			GetCursorPos(&pt);
			SetForegroundWindow();
			pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);
			break;
		}
	case WM_LBUTTONDBLCLK:
		ShowWindow(SW_RESTORE);
		SetForegroundWindow();
		break;
	default:break;
	}
	return NULL;
}

添加托盘实现代码

bool CBBSDlg::TrayMyIcon(bool bAdd)
{
	BOOL bRet = FALSE;
	NOTIFYICONDATA tnd;
	tnd.cbSize = sizeof(NOTIFYICONDATA);
	tnd.hWnd = m_hWnd;
	tnd.uID = IDR_MAINFRAME;
	if ( bAdd == TRUE ) {
		tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
		tnd.uCallbackMessage = WM_TRAYICON_MSG;
		tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));
		_tcscpy_s(tnd.szTip, sizeof(tnd.szTip), _T("BBS_YDC_123"));
		ShowWindow(SW_MINIMIZE);
		ShowWindow(SW_HIDE);
		bRet = Shell_NotifyIcon(NIM_ADD, &tnd);
	}else{
		ShowWindow(SW_SHOWNA);
		SetForegroundWindow();
		bRet = Shell_NotifyIcon(NIM_DELETE, &tnd);
	}
	return bRet;
}
//实现托盘
TrayMyIcon();


首先声明我看得教程是vc聊天室里面的托盘
资料内容是
---------------------------------------------------------------------------
VC 驿站
WwW.CcTry.Com
多抽出一分钟时间学习.让你的生命更加精彩.
C、C++、VC++ 各种学习资源,免费教程,期待您的加入!
动画教程只是起到技术交流的作用.请大家不用利用此方法做非法用途.
由此动画造成的任何后果和动画作者及本站无关.
---------------------------------------------------------------------------
大家好,我是Syc                   QQ:7657318	QQ 技术交流群:84780266
今天给大家做的教程是:
Vc++ 打造局域网聊天室(10)---任务栏托盘功能的实现 
---------------------------------------------------------------------------

1、封装 “其他功能” 按钮响应函数:
void CChatRoomDlg::OnBnClickedOther()
{
	CPoint pt;
	CRect mRect;
	CMenu mMenu, *pMenu = NULL;
	GetDlgItem(IDC_OTHER)->GetWindowRect(&mRect);
	pt = mRect.BottomRight();
	pt.y = mRect.top+10;
	mMenu.LoadMenu(IDR_MENU1);
	pMenu = mMenu.GetSubMenu(0);
	pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);

}

2、任务栏托盘函数的封装:
BOOL CChatRoomDlg::TrayMyIcon(BOOL bAdd)
{
	BOOL bRet = FALSE;
	NOTIFYICONDATA tnd;
	tnd.cbSize = sizeof(NOTIFYICONDATA);
	tnd.hWnd = m_hWnd;
	tnd.uID = IDR_MAINFRAME;
	if ( bAdd == TRUE ) {
		tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
		tnd.uCallbackMessage = WM_TRAYICON_MSG;
		tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
		_tcscpy_s(tnd.szTip, sizeof(tnd.szTip), _T("聊天室v1.0"));
		ShowWindow(SW_MINIMIZE);
		ShowWindow(SW_HIDE);
		bRet = Shell_NotifyIcon(NIM_ADD, &tnd);
	}else{
		ShowWindow(SW_SHOWNA);
		SetForegroundWindow();
		bRet = Shell_NotifyIcon(NIM_DELETE, &tnd);
	}
	return bRet;
}

3、消息响应函数的添加:
#define WM_TRAYICON_MSG (WM_USER+100)
ON_MESSAGE(WM_TRAYICON_MSG, OnTrayCallBackMsg)

LRESULT CChatRoomDlg::OnTrayCallBackMsg(WPARAM wparam, LPARAM lparam)
{
	switch(lparam)
	{
	case WM_RBUTTONUP:
		{
			CMenu mMenu, *pMenu = NULL;
			CPoint pt;
			mMenu.LoadMenu(IDR_MENU2);
			pMenu = mMenu.GetSubMenu(0);
			GetCursorPos(&pt);
			SetForegroundWindow();
			pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);
			break;
		}
	case WM_LBUTTONDBLCLK:
		ShowWindow(SW_RESTORE);
		SetForegroundWindow();
		break;
	default:break;
	}
	return NULL;
}

备注:本节课是《Vc++打造局域网聊天室》系列课程的最后一课,所有的功能也都给大家实现并讲解了,不知道大家学的怎么样!还是希望大家多实践,多写代码,以此来提高能力。

本程序代码已打包给大家,大家可以参考!

由于本作者能力有限,在《Vc++打造局域网聊天室》系列课程中如有错误信息,请指正!










您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值