游戏编程入门学习笔记32——菜单篇——自定义操控键的最终实现

来源:互联网 发布:美爱网络推广 编辑:程序博客网 时间:2024/05/22 10:49

有了前面的铺垫,剩下的工作就水到渠成了。

我写了三个函数,分别实现VK码、DIK码、字符串间的互转。

对于如何实现每次在一个edit窗口按某键后就显示字符串并在同一个窗口按下另一个键时也能自动清空内容并再次显示新值,我是采用KEY_DOWN输入空字符串KEY_UP输入按键对应名称的方法,所以需要额外做一个vkchar的函数,所幸MapVirtualKey同样具备这个功能。

此外需要多设定一组临时变量以满足可以保存设置或是取消设置的功能。

 

这里回顾总结下三种proc的一些特征:

“当窗口过程对消息进行处理后,应返回0。所有窗口过程不处理的消息都必须传给DefWindowProc()DefWindowProc()的返回值必须从窗口过程返回。”

——《Windows程序设计》 55

1WinProc,就是最初最原始的那个,上段话讲的就是关于这个过程。

2DlgProc,对话框过程,仅处理部分消息,处理过消息则返回TRUE,否则返回FALSE

3subclassEditProc,子类窗口过程,这个只管对各种消息进行处理好了,对返回值没作要求。

不过记得最后一定要Return CallWindowProc(wpOrigEditProc,hwnd,message,wParam,lParam);

 

最后还有个问题,许多按键默认被当做快捷键,比如F10Alt,会激活菜单栏;Win键会激发开始菜单;App键会激发右键菜单。这样假如玩家采用这些键做操控键,即便在对话框中设置成功,在游戏中也完全无法正常使用的。

为此我重看了关于Message的各种函数,又到网上搜了半天,发现大概要用到一种叫HOOK函数的东西,SetWindowsHookEx之类。大致看了下感觉不是一两下能掌握的,出于时间紧迫的考虑,仅在自定义操控键对话框中用文字做了个提示不要用这些键的说明……

以后有空再研究解决办法吧。

(2013.8.12注:directinput里有个屏蔽win键的选项,不知能否有所帮助)

 

一个看似简单的自定义按键功能,前后花了有四、五天功夫,这真要命。不过等做成功了,还是感觉挺爽的,贴个图展示下:

原创粉丝点击