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

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




相关文章
|
22天前
如何隐藏windows10系统任务栏右下角的语言输入法图标?
如何隐藏windows10系统任务栏右下角的语言输入法图标?
|
5天前
|
API C++ Windows
windows编程入门_链接错误的配置
windows编程入门_链接错误的配置
11 0
|
3月前
|
Windows
火山中文编程 -- 第一个windows程序
火山中文编程 -- 第一个windows程序
12 0
|
3月前
|
编译器 API Windows
windows编程基础
windows编程基础
13 0
|
3月前
|
Windows
win32编程 -- windows绘图操作
win32编程 -- windows绘图操作
20 0
|
4月前
|
网络协议 Linux C语言
005.在Windows下编程让效率起飞
windows开发Linux方式: 先用编辑器编写源代码 然后进入Linux 系统,使用gcc编译器(后面会讲),对源代码进行编译运行。 熟练后推荐使用VS2019 开发Linux C++ 程序 将自己的Ip地址设为静态IP
40 1
|
监控 测试技术 Windows
软件测试面试题:LoadRunner中如何监控Windows资源?
软件测试面试题:LoadRunner中如何监控Windows资源?
68 0
|
监控 安全 测试技术
|
2月前
|
安全 数据安全/隐私保护 Windows
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
解锁安全之门,Windows Server 2019密码修改攻略大揭秘

热门文章

最新文章