MFC:程序的托盘显示

这篇具有很好参考价值的文章主要介绍了MFC:程序的托盘显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

关键技术,API函数Shell_NotifyIcon,具体查看msdn吧

实现的主要代码

#define MY_TRAY_ICON_ID (1)

/
//其他代码:略

BEGIN_MESSAGE_MAP(CTestShowTrayDlg, CDialogEx)
	//...
	ON_MESSAGE(WM_MY_TRAY_ICON, &CTestShowTrayDlg::OnMessageTrayIcon)
	/
END_MESSAGE_MAP()


void CTestShowTrayDlg::ShowTrayIcon()
{
	NOTIFYICONDATA nid = { 0 };
	nid.cbSize = sizeof(NOTIFYICONDATA);
	nid.hWnd = this->m_hWnd;
	nid.uID = MY_TRAY_ICON_ID;
	nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	nid.uCallbackMessage = WM_MY_TRAY_ICON; //托盘图标中消息回调,如鼠标左键、右键等等
	nid.hIcon = m_hIcon;
	_tcscpy_s(nid.szTip, _T("测试托盘显示图标"));
	Shell_NotifyIcon(NIM_ADD, &nid); //在托盘区添加图标
}

void CTestShowTrayDlg::DelTrayIcon()
{
	NOTIFYICONDATA nid = { 0 };
	nid.cbSize = sizeof(NOTIFYICONDATA);
	nid.hWnd = this->m_hWnd;
	nid.uID = MY_TRAY_ICON_ID;
	Shell_NotifyIcon(NIM_DELETE, &nid); //在托盘区移除图标
}

LRESULT CTestShowTrayDlg::OnMessageTrayIcon(WPARAM wParam, LPARAM lParam)
{
	if (wParam != MY_TRAY_ICON_ID)//wParam传入nid.uID
	{
		return TRUE;
	}

	switch (lParam)
	{
	case WM_LBUTTONUP:
	case WM_LBUTTONDBLCLK:
	{
		OnMenuShowWindow();
		break;
	}
	case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
	{
		CPoint ptCursor;
		::GetCursorPos(&ptCursor);

		//从资源中加载菜单
		CMenu mTrayMenu;
		mTrayMenu.LoadMenu(MAKEINTRESOURCE(IDR_MENU_TRAY));
		CMenu* pMenu = mTrayMenu.GetSubMenu(0);
		if (pMenu) pMenu->TrackPopupMenu(TPM_LEFTALIGN, ptCursor.x, ptCursor.y, this);
		mTrayMenu.DestroyMenu(); //资源回收

		break;
	}
	}
	return TRUE;
}

//显示主界面
void CTestShowTrayDlg::OnMenuShowWindow()
{
	this->ShowWindow(SW_SHOWNORMAL);
	this->SetForegroundWindow();
	this->SetActiveWindow();
}

//退出
void CTestShowTrayDlg::OnMenuExit()
{
	DelTrayIcon();
	CDialogEx::OnCancel();
}


void CTestShowTrayDlg::OnOK()
{
	// TODO:  在此添加专用代码和/或调用基类

	//屏蔽ESC/Enter
	//CDialogEx::OnOK();
}


void CTestShowTrayDlg::OnCancel()
{
	this->ShowWindow(SW_HIDE);
	//屏蔽ESC/Enter
	//CDialogEx::OnCancel();
}

参看

https://www.cnblogs.com/htj10/p/11688347.html文章来源地址https://www.toymoban.com/news/detail-733352.html

到了这里,关于MFC:程序的托盘显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 MFC 和 OpenCV 实现实时摄像头视频显示

    1、引言 MFC 是一个在 Windows 平台上编写 C++ 应用程序的库,提供了丰富的用户界面功能。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,包含了丰富的图像处理和计算机视觉功能。本文将向大家展示如何将这两个库结合起来,实现一个实时显示摄像头画面的简

    2024年02月13日
    浏览(92)
  • 【MFC】05.MFC六大机制:程序启动机制-笔记

    MFC程序开发所谓是非常简单,但是对于我们逆向人员来说,如果想要逆向MFC程序,那么我们就必须了解它背后的机制,这样我们才能够清晰地逆向出MFC程序,今天这篇文章就来带领大家了解MFC的第一大机制:程序启动机制: 首先,我们创建一个单文档架构程序,我们来观察一

    2024年02月13日
    浏览(34)
  • 【MFC】05.MFC第一大机制:程序启动机制-笔记

    MFC程序开发所谓是非常简单,但是对于我们逆向人员来说,如果想要逆向MFC程序,那么我们就必须了解它背后的机制,这样我们才能够清晰地逆向出MFC程序,今天这篇文章就来带领大家了解MFC的第一大机制:程序启动机制: 首先,我们创建一个单文档架构程序,我们来观察一

    2024年02月14日
    浏览(35)
  • MFC框架程序解析

    MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用。利用这些类,可以有效地帮助程序员完成Windows应用程序的开发。 即MFC是一个封装库, 该库封装了 Windows程序运行机

    2024年02月05日
    浏览(45)
  • MFC获取当前程序路径

    可以获取exe的路径,但是当用文件对话框成功打开一个文件后,该目录就被修改为被打开的文件所在目录。 获取的是当前exe的路径。 建议使用这种方法。 如,打开C盘 打开CMD 打开计算器 打开txt文件

    2024年02月17日
    浏览(52)
  • 用MFC打开外部程序

    在MFC(Microsoft Foundation Classes)中,你可以使用 ShellExecute 函数来打开Notepad并加载指定的文件。 ShellExecute 函数是Windows API的一部分,它可以执行与操作系统相关的操作,例如打开文件、运行程序等。 以下是在MFC中使用 ShellExecute 函数打开Notepad并加载文件的示例代码: 在上述代

    2024年02月11日
    浏览(32)
  • MFC 获取程序版本信息

     在 MFC 应用程序中,可以使用 GetFileVersionInfo 函数来获取程序版本信息。这个函数能够获取一个指定文件的版本信息,并将其存储在一个缓冲区中。然后,可以使用 VerQueryValue 函数来解析版本信息并提取所需的信息。 调用

    2024年04月09日
    浏览(33)
  • MFC简单字符串压缩程序

    一个mfc简单字符串压缩程序;按以下情况进行压缩; 1 仅压缩连续重复出现的字符。比如”abcbc”无连续重复字符,压缩后还是”abcbc”。 2 压缩的格式为”字符重复的次数+字符”。例如,”xxxyyyyyyz”压缩后就成为”3x6yz”。

    2024年02月07日
    浏览(40)
  • 微软MFC程序运行的正确顺序

     我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下微软MFC程序运行的正确顺序。这真的只是一个小众话题。但是对理解MFC很重要。 很多人写了一堆MFC程序,却不知道MFC程序是怎么运行顺序的。我们就来看一看这个问题。 我在之前的帖子中多次提到,main()函数也

    2024年02月13日
    浏览(33)
  • MFC单文档应用程序的基础

    一、口令对话框 例题1: 编写一个单文档应用程序,在视图中显示自己的姓名;单击鼠标左键,在消息框中显示 鼠标左键被按下的次数;单击鼠标右键,在消息框中显示鼠标右键被按下的次数。 操作步骤: 1、创建一个SDI应用程序(具体步骤略)。 2、在视图类中找到C***Vi

    2024年02月02日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包