MFC - 给系统菜单(About Dialog)发消息

这篇具有很好参考价值的文章主要介绍了MFC - 给系统菜单(About Dialog)发消息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MFC - 给系统菜单(About Dialog)发消息

概述

做了一个对话框程序, 在系统菜单(在程序上面的标题栏右击)中有"关于"的菜单.
这个是程序框架自带的, 自己没写代码.
MFC - 给系统菜单(About Dialog)发消息,MFC,mfc,c++
这个Dlg程序, 因为简单, 没加啥菜单. 将授权也放到"关于"对话框中一并处理.
怕用户看不到咋进入"关于"菜单, 在UI上加了一个"关于"的按钮.
在这个按钮实现中, 就是调用系统菜单中的"关于"菜单项.
是可以自己再照着框架模板生成的代码, 将About Dlg 的调用代码抄过来, 感觉不怎么好(已经有的代码写2遍?).
想想, 是否可以给About菜单项发个消息, 模拟手工点击菜单的效果. 这样好像优雅一点.
试了几次, 整出来了, 就一句话.

void CxxDlg::OnBnClickedButtonLicense()
{
	// https://learn.microsoft.com/zh-cn/windows/win32/menurc/wm-syscommand
	this->PostMessageW(WM_SYSCOMMAND, IDM_ABOUTBOX, 0);
}

笔记

结合MSDN, 看看IDM_ABOUTBOX这个菜单项相关的东西.

resource.h

#define IDM_ABOUTBOX                    0x0010

IDM_ABOUTBOX是一个很小的值.

菜单的建立

BOOL CxxDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	// IDM_ABOUTBOX 值定义的范围有要求, 不过都是MFC模板来预先定义好, 我们不用管
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

这个添加系统菜单的实现, 如果我们要新增系统菜单项上的条目, 也可以这样加.

菜单项的处理

void CxxDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	// 这里能看出来, 系统菜单项的值不能乱定义, 有范围的.
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

MSDN上关于系统菜单项值的说法

https://learn.microsoft.com/zh-cn/windows/win32/menurc/wm-syscommand
MFC - 给系统菜单(About Dialog)发消息,MFC,mfc,c++
PostMessage的参数:
参数1 : message = WM_SYSCOMMAND
参数2 : wParam = IDM_ABOUTBOX // msdn上给的wParam范围, 都是SC_XX, 没有系统菜单项的例子
参数3 : lParam = 0, 按照msdn的说法, lParam是鼠标点击时所在的坐标, 看程序框架中的系统菜单项处理, 没有用lParam, 所以我们也不用填(给0).

MFC - 给系统菜单(About Dialog)发消息,MFC,mfc,c++
MFC - 给系统菜单(About Dialog)发消息,MFC,mfc,c++文章来源地址https://www.toymoban.com/news/detail-773308.html

  • 可以看出系统菜单项的ID范围 from 0x0010 ~ 0xFFF0
  • 如果自己定义了菜单项, 就必须自己处理, 不能传给框架.

END

到了这里,关于MFC - 给系统菜单(About Dialog)发消息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MFC 如何修改MF_POPUP菜单项文本

             MFC 修改MF_POPUP菜单项文本的方法有点特别,记录下来备忘。         关键点是ModifyMenu()函数会把关联的下级菜单的句柄与菜单文本一起修改,因此需要把之前关联的下级菜单提取出来,调用ModifyMenu()把它放回去。

    2024年02月13日
    浏览(26)
  • MFC新建内部消息

    提示:记录一下MFC新建内部消息的成功过程 文章目录 前言 一、第一阶段 二、第二阶段 三、第三阶段 总结 先说一下基本情况,因为要在mapview上增加一个显示加载时间的功能。然后发现是要等加载完再显示时间,显示在主窗口。所以就是在子线程中发送消息给窗口的问题。

    2024年02月09日
    浏览(35)
  • windows MFC消息demo

    2024年02月11日
    浏览(32)
  • 微软MFC技术中消息的定义

     我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊MFC技术中消息的定义。 本贴子首先介绍MFC消息的基本概念,理解消息的定义是学习使用MFC的基础。了解消息的驱动机制后,才能彻底明白MFC的运行机制。 首先来看什么是消息。通俗地讲,人们常常把外界的各种报

    2024年02月12日
    浏览(37)
  • 微软MFC技术中消息的分类

     我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊MFC技术中消息的分类。 微软Windows中的消息虽然很多,但是种类并不繁杂,大体上有3种:窗口消息、命令消息和控件通知消息。 窗口消息是系统中最为常见的消息,它是指由操作系统和控制其他窗口所使用的消息。

    2024年02月13日
    浏览(24)
  • 微软MFC技术中的消息循环

     我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊微软MFC技术中的消息循环。 在很多windows程序中,都有如下代码: 在上面代码的第30行中,提到了循环。只有消息不断地被循环。才会实时得到窗口的当前状态。否则按照程序的顺序执行结构,此窗口只会闪下就被

    2024年02月13日
    浏览(23)
  • MFC动态创建控件与建立消息响应

    以动态创建按钮为例,新建MFC工程 在解决方案管理器,Resource.h中编辑,添加一个IDC_BUTTON0的资源ID

    2024年02月14日
    浏览(31)
  • 微软MFC技术中的消息队列及消息处理(下)

      我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊微软MFC技术中的消息队列及消息处理。 MFC应用程序中由Windows 系统以消息的形式发送给应用程序的窗口。窗口接收和处理消息之后,把控制返回给Windows。Windows系统在同一时间可显示多个窗口。此系统利用消息队列

    2024年02月16日
    浏览(33)
  • 微软MFC技术中的消息队列及消息处理(上)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊微软MFC技术中的消息队列及消息处理。 MFC应用程序中由Windows 系统以消息的形式发送给应用程序的窗口。窗口接收和处理消息之后,把控制返回给Windows。Windows系统在同一时间可显示多个窗口。此系统利用消息队列来

    2024年02月16日
    浏览(27)
  • MFC与QT的消息机制的区别

    Windows 的消息系统由以下 3 部分组成:          消息队列 :Windows 能够为所有的应用程序维护一个消息队列,应用程序必须从消息队列中获去消息, 然后分派给某个窗体。          消息循环 :通过这个循环机制,应用程序从消息队列中检索消息,再把它分派给适当的

    2024年02月05日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包