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;
  }

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




相关文章
|
4月前
如何隐藏windows10系统任务栏右下角的语言输入法图标?
如何隐藏windows10系统任务栏右下角的语言输入法图标?
|
13天前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
34 0
|
1月前
|
编译器 开发工具 C语言
解锁QtCreator跨界神技!Windows下轻松驾驭OpenCV动态库,让你的跨平台开发如虎添翼,秒变视觉编程大师!
【8月更文挑战第4天】QtCreator是一款强大的跨平台IDE,便于创建多平台应用。本教程教你如何在Windows环境下集成OpenCV库至Qt项目。首先,下载匹配MinGW的OpenCV预编译版并解压。接着,在QtCreator中新建或打开项目,并在.pro文件中添加OpenCV的头文件和库文件路径。确保编译器设置正确。随后编写测试代码,例如加载和显示图片,并进行编译运行。完成这些步骤后,你就能在QtCreator中利用OpenCV进行图像处理开发了。
89 6
|
20天前
|
存储 Linux 数据中心
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
|
3月前
|
Java C++
jni编程(windows+JDK11+clion)
jni编程(windows+JDK11+clion)
|
2月前
|
NoSQL Redis Windows
redis双击闪退解决方法,windows版的redis资源,redis安装,win资源可下
redis双击闪退解决方法,windows版的redis资源,redis安装,win资源可下
|
3月前
|
Windows
逆向学习Windows篇:通过编写函数处理菜单消息
逆向学习Windows篇:通过编写函数处理菜单消息
23 0
|
3月前
|
C++ UED 开发者
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
30 0
|
4月前
|
Java 程序员 Windows
【windows自带exe】使用`findstr.exe`来搜索包含某个字符串的文件
【windows自带exe】使用`findstr.exe`来搜索包含某个字符串的文件
265 0
|
4月前
|
API C++ Windows
windows编程入门_链接错误的配置
windows编程入门_链接错误的配置
45 0