GetSystemMenu(FALSE)

简介: GetSystemMenu 参数为False时返回当前窗口系统菜单(窗口标题栏右键弹出的移动、大小、最大化等)的句柄。         系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”.“移动”.“最大化”.“最小化”.“关闭”这么几个按钮.这个菜单用普通的方法是不能编辑与改变的,但是我们可以通过api函数getsystemmenu来得到它的句柄,然后通过菜单相关的api函数就能改变它了。

GetSystemMenu

参数为False时返回当前窗口系统菜单(窗口标题栏右键弹出的移动、大小、最大化等)的句柄

        系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”.“移动”.“最大化”.“最小化”.“关闭”这么几个按钮.这个菜单用普通的方法是不能编辑与改变的,但是我们可以通过api函数getsystemmenu来得到它的句柄,然后通过菜单相关的api函数就能改变它了。

         如果括号中参数为FALSE,GetSystemMenu返回当前使用窗口菜单的拷贝的句柄。该拷贝初始时与窗口菜单相同,但可以被修改。
         如果此参数为TRUE,GetSystemMenu重置窗口菜单到缺省状态。如果存在先前的窗口菜单,将被销毁。

         任何没有用函数GetSystemMenu来生成自己的窗口菜单拷贝的窗口将接受标准窗口菜单。

         窗口菜单上的菜单项发送WM_SYSCOMMAND消息.

在一个对话框工程中:

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
   CString strAboutMenu;
   strAboutMenu.LoadString(IDS_ABOUTBOX);
   if (!strAboutMenu.IsEmpty())
   {
    pSysMenu->AppendMenu(MF_SEPARATOR);//添加一条水平线
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);//IDM_ABOUTBOX表示要执行的动作,因为在点击这个菜单项时,将会发送消息,消息中nID就是这个ID,通过比对ID产生相应的动作
   }
}
void CADO_TestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
   CAboutDlg dlgAbout;
   dlgAbout.DoModal();
}
else
{
   CDialog::OnSysCommand(nID, lParam);
}
}

      只有在主窗口是对话框的MFC应用程序中才会出现这个消息IDM_ABOUTBOX。
       IDM_ABOUTBOX是MFC框架在“InitDialog”函数中加入的“系统菜单”消息,用来弹出“IDD_ABOUTBOX”指定的对话框。
       关于((nID & 0xFFF0) == IDM_ABOUTBOX):
       在MSDN中SysCommand的帮助中,有这样一段:
       In WM_SYSCOMMAND messages, the four low-order bits of the nID parameter are used internally by Windows. When an application tests the value of nID, it must combine the value 0xFFF0 with the nID value by using the bitwise-AND operator to obtain the correct result.  
       即nID的低四位是Windows内部用的,应用程序在检测这个ID时,必须用 0xFFF0与nID相与,屏蔽低四位,根据相与的结果来产生相应的动作

目录
相关文章
|
小程序 JavaScript 前端开发
【经验分享】如何获取任意小程序appId及页面路径
【经验分享】如何获取任意小程序appId及页面路径
2279 8
|
存储 供应链 算法
《数学模型(第五版)》学习笔记(2)第3章 简单的优化模型 第4章 数学规划模型
《数学模型(第五版)》学习笔记(2)第3章 简单的优化模型 第4章 数学规划模型
573 1
|
运维 监控 关系型数据库
运维实战:Windows服务挂掉了怎么办,通过Bat脚本实现自动重启
本文介绍了如何使用Bat脚本自动监控并重启Windows服务器上的挂掉服务,例如MySQL,以避免在假期等情况下需要紧急处理问题。首先,创建一个Bat脚本,设定每小时检查一次服务状态,如果服务停止则自动重启。脚本内容包括检查服务是否运行并根据状态执行相应操作。同时,脚本中包含了确保以管理员权限运行的代码。 脚本需设置为ANSI编码以防止乱码。推荐将Bat脚本封装为Windows服务以保证稳定运行,提供了使用NSSM工具、Windows服务程序和开源的Java工具winsw将批处理脚本转化为服务的方法。这些方法可以确保服务在后台可靠运行,即使在服务意外停止时也能自动恢复。
|
机器学习/深度学习 自然语言处理 算法
深度学习-生成式检索-论文速读-2024-09-14(下)
深度学习-生成式检索-论文速读-2024-09-14(下)
|
前端开发 数据可视化 安全
82.7K star!大气炫酷UI开源项目,超级火!
shadcn/ui 是一款基于 Radix UI 和 Tailwind CSS 构建的现代化 UI 组件库,专为追求设计品质与开发效率的开发者打造。不同于传统组件库,它提供完全可定制的组件代码模板,让开发者既能享受开箱即用的便利,又能保持对设计系统的完全掌控。
771 13
ly~
|
缓存 监控 编译器
如何优化 SDL 图形库在不同系统中的性能
SDL(Simple DirectMedia Layer)是一个跨平台的多媒体开发库,用于优化不同系统中的图形库性能。在银河麒麟系统中,通过SDL渲染模式提升视频监控客户端性能,支持更多播放路数。优化方法包括:1) 图像加载时使用SDL_ConvertSurface转换图像格式,避免内存中存在多份拷贝;2) 在VSCode下配置SDL时,合理设置编译器选项和项目架构,减少API调用带来的性能开销;3) 使用SDL库在景嘉微7200显卡上优化渲染性能,提高播放路数。综合考虑图像加载优化、系统特性利用及硬件兼容性,以实现最佳性能。
ly~
1059 6
|
SQL 微服务
成功解决 :status 500 reading CouponFeignService#saveSpuBounds(SpuBoundTo)
这篇文章讲述了作者在微服务项目开发中遇到的一个具体问题:使用Feign进行远程服务调用时出现了`status 500`错误。文章详细描述了排查过程,包括检查Feign配置和被调用服务的日志信息,最终确定问题是由于Lombok插件的`@Data`注解导致。作者通过将`@Data`注解注释掉并手动生成get、set方法解决了问题,并提供了成功调用远程服务后的截图。
成功解决 :status 500 reading CouponFeignService#saveSpuBounds(SpuBoundTo)
|
算法 搜索推荐 编译器
算法高手养成记:Python快速排序的深度优化与实战案例分析
【7月更文挑战第11天】快速排序是编程基础,以O(n log n)时间复杂度和原址排序著称。其核心是“分而治之”,通过选择基准元素分割数组并递归排序两部分。优化包括:选择中位数作基准、尾递归优化、小数组用简单排序。以下是一个考虑优化的Python实现片段,展示了随机基准选择。通过实践和优化,能提升算法技能。**
316 3
|
数据库
优化数据加载策略:深入探讨Entity Framework Core中的懒加载与显式加载技术及其适用场景
【8月更文挑战第31天】在 Entity Framework Core(EF Core)中,数据加载策略直接影响应用性能。本文将介绍懒加载(Lazy Loading)和显式加载(Eager Loading)的概念及适用场景。懒加载在访问导航属性时才加载关联实体,可优化性能,但可能引发多次数据库查询;显式加载则一次性加载所有关联实体,减少查询次数但增加单次查询的数据量。了解这些策略有助于开发高性能应用。
336 0
|
存储 缓存 Linux
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(三)--实时与非实时数据交互
本文介绍了Xenomai中的XDDP(Xenomai Distributed Data Protocol)通信机制,XDDP用于实时和非实时进程之间的数据交换。XDDP在Xenomai内核中涉及的数据结构和管理方式,以及创建XDDP通道后的实时端和非实时端连接过程。
994 0
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(三)--实时与非实时数据交互