将对话框程序最小化到托盘

本文详细介绍了在C++中实现通知图标功能的过程,包括在头文件和源文件中增加必要的成员变量、消息函数声明与定义,以及如何通过Shell_NotifyIcon函数实现图标的通知功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:在XXXDlg.h中增加成员变量
NOTIFYICONDATA nid;
增加消息函数声明,就放在其他很多的afx_msg系列函数一起就行:
afx_msg void OnNotifyIcon(WPARAM, LPARAM);
2:在cpp中修改如下内容:
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
在以上内容段下面增加如下自定义消息定义
#define WM_NOTIFY_ICON	WM_USER + 101

BEGIN_MESSAGE_MAP(CNotifyIconDlg, CDialog)
	//{{AFX_MSG_MAP(CNotifyIconDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_MESSAGE(WM_NOTIFY_ICON, OnNotifyIcon)  在这段函数中增加这句消息映射
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()



找到这段函数,并修改成这样
void CNotifyIconDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		if (nID == SC_MINIMIZE)
		{
			ShowWindow(SW_HIDE);
			ZeroMemory(&nid, sizeof(nid));
			nid.cbSize = sizeof(NOTIFYICONDATA);
			nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
			nid.hWnd = m_hWnd;
			strcpy(nid.szTip, "提示信息");
			nid.uCallbackMessage = WM_NOTIFY_ICON;
			nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
			Shell_NotifyIcon(NIM_ADD, &nid);
		}
		else
		{
			CDialog::OnSysCommand(nID, lParam);
		}
	}
}

cpp文件末尾增加如下函数:
void CNotifyIconDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
	if (lParam == WM_LBUTTONDOWN || lParam == WM_RBUTTONDOWN)
	{
		ShowWindow(SW_SHOW);
	}
}

这个函数通过编译器的向导生成框架,并增加Shell_NotifyIcon这句
BOOL CNotifyIconDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	Shell_NotifyIcon(NIM_DELETE, &nid);
	
	return CDialog::DestroyWindow();
}

以上是VC++6.0实现

转自:http://zhidao.baidu.com/question/407656694.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值