Windows编程资源,菜单资源,图标资源,光标资源,上下文菜单,字符串资源,加速键资源(下)

简介: Windows编程资源,菜单资源,图标资源,光标资源,上下文菜单,字符串资源,加速键资源(下)

二.上下文菜单

1.显示上下文菜单(右键菜单)

MSDN官方文档解释TrankPopupMensu函数

BOOL TrankPopupMenu(
  HMENU hMenu,      //要显示的快捷菜单的句柄。
  UINT nFlags,      //指定显示方式
  int x,
  int y,            //x,y分别为快捷菜单位置,x为水平位置,y为垂直位置(屏幕坐标系)
  int nReserved,    //保留,必须为0
  HWND hWnd,        //拥有快捷菜单的窗口句柄
  const RECT* prcRext  //已忽略
  );

注意: 这里的第一个参数hMenu,可以通过CreatePopopMenu函数来创建一个新的快捷菜单,也可以通过GetSubMenu函数来检索与现有菜单项关联的子菜单句柄来获取句柄。

这个函数是阻塞函数

2.上下文菜单中的WM_RBUTTONUP消息

鼠标右键被放开为窗口坐标系坐标,如果要转化为屏幕坐标系的话,请使用ClientToScreen函数。

3.WM_CONTEXTMENU消息

MSDN官方文档结束WM_CONTEXTMENU消息

  • 产生时间:鼠标右键被放开时
  • 附加信息
  • wParam:右键点击的窗口句柄
  • lParam:
  • LOWORD:x
  • HIWORD:y (注意是屏幕坐标系)

我们在讲解鼠标消息的时候,鼠标右键被放开时会产生WM_RBUTTONUP消息,这里的WM_CONTEXTMENU消息是在WM_RBUTTONUP消息之后产生的。

三.图标资源,光标资源

1.添加图标资源

像我们添加菜单资源一样,添加Icon资源

添加好之后,我们可以选择自己画一个图标或者从外部添加图标,注意图标大小,一个图形文件中,可以有多个大小不同的图标。

2.加载图标资源

将图标资源设置好之后,我们需要拿到图标资源句柄

我们可以使用LoadIcon函数来获取图标句柄:

MSDN官方文档解释LoadIcon函数

HICON LoadIcon(
  HINSTANCE hInstance,     //图标资源的实例句柄
  LPCTSTR lpIconName       //要加载的图标资源的名称
);

获取到图标资源句柄之后,我们只需要在注册窗口时将图标资源句柄传给hIcon参数即可。

3.添加光标资源

像前文讲到的添加菜单资源,图标资源一样,我们只需要选择Coursor

添加好光标资源后,每个光标还有FotSpot,是当前鼠标的热点,只有在这一点上,光标才起作用。

4.加载光标资源

添加好光标资源后,我们还是需要拿到光标资源句柄,我们可以使用HCURSOR函数来获取光标资源句柄。

MSDN官方文档解释LoadCursor函数

HCURSOR LoadCursor(
  HINSTANCE hInstance,        //光标资源句柄可以为0
  LPCTSTR lpCursorName        //光标资源名称
  );

当hInstance参数为0时,获取系统默认的光标资源

5.设置资源

  • 我们拿到光标资源句柄后,在注册窗口时,设置hCursor参数为我们拿到的光标资源句柄即可。
  • 我们也可以在创建窗口时,显示窗口之前,使用SetCursor函数来设置光标资源。

5.WM_SETCURSOR消息

  • 产生时间:如果鼠标导致光标在窗口移动,并且未捕获鼠标输入,则发送到窗口
  • 附加消息:
  • wParam:包含光标的窗口句柄
  • lParam:
  • LOWORD:当前区域代码(指定触发此消息的窗口,当进入菜单模式时,此字段为0)
  • HIWORD:当前鼠标消息ID

三.字符串资源

在这里我们讲一下,字符串资源到底有什么作用呢?

我们在做开发的时候,客户可能有时候让我们做中文版界面,有时候又想让我们改为英文版界面,这时候字符串资源就显得特别重要了,不让我们要改很多源码。

同样,我们到可视化图形界面来添加字符串资源

  • 获取字符串资源句柄
int LoadString(
  HINSTANCE hInstance,     //包含字符串资源的可执行文件的实例句柄
  UINT uID,      //要加载的字符串标识符
  LPTSTR lpBuffer,    //存放字符串的Buff
  int nBufferMax     //字符串Buff长度
  );

四.加速键资源

加速键资源这里定义的有点抽象了,其实就是快捷键。

1.添加加速键资源

我们还是添加资源–>添加Accelerator资源

2.加速键资源的使用

  • 加载加速键表

MSDN官方文档解释LoadAccelerstors函数

加载指定的加速器表。

HACCEL LoadAccelerators(
  HINSTANCE hInstance,      //模块的实例句柄
  LPCTSTR lpTableName       //要加载的加速表的名称
  );

这里注意,我们加载完加速表后,不能直接使用加速键表,我们还需要翻译加速键,

MSDN官方文档解释TranslateAccelerator函数,函数作用:处理菜单命令的快捷键。

int TranslateAccelerator(
  HWND hWnd,         //要翻译其消息的窗口句柄
  HACCEL hAccTable,  //加速器表的句柄
  LPMSG lpMsg        //指向Msg结构的指针,其中包括检索得到的消息
  );

那么加速器到底是怎么工作的?我们来写一段伪代码为大家讲解:

TranslateAcceleator(hWnd,hAccTable,&Msg){
  if(Msg.message != WM_KEYDOWN) return 0;
  根据Msg.wParam获知按键到底是哪个
  查表,到hAccelTable中比对是否存在该加速键
  if(没找到) return 0;
  else{
  SendMesage(hWnd,WM_COMMAND,ID_NEW....);
  return 0;
  }

今天的分享就到这里,如果文章中有错误之处,还请大家指出来,我会非常虚心得学习,希望我们共同进步!!!




相关文章
|
3天前
|
Windows
[原创]用MASM32编程获取windows类型
[原创]用MASM32编程获取windows类型
|
4天前
|
JavaScript 前端开发 API
MASM32编程通过WMI获取Windows计划任务
MASM32编程通过WMI获取Windows计划任务
|
3天前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
5天前
|
API Windows
MASM32编程获取Windows当前桌面主题名
MASM32编程获取Windows当前桌面主题名
|
2月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
98 0
|
28天前
|
网络安全 虚拟化 Windows
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
|
2月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
2月前
|
开发框架 .NET API
Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x80070005
Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x80070005
81 0
|
2月前
|
Linux Docker Windows
Windows——Docker拉取Windows Server镜像
Windows——Docker拉取Windows Server镜像
105 0
|
3月前
|
弹性计算 持续交付 Docker
阿里云云效产品使用合集之如何部署到阿里云服务器上的 Windows Server 上的 IIS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。