游戏编程入门学习笔记32——菜单篇——自定义操控键的最终实现
来源:互联网 发布:美爱网络推广 编辑:程序博客网 时间:2024/05/22 10:49
有了前面的铺垫,剩下的工作就水到渠成了。
我写了三个函数,分别实现VK码、DIK码、字符串间的互转。
对于如何实现每次在一个edit窗口按某键后就显示字符串并在同一个窗口按下另一个键时也能自动清空内容并再次显示新值,我是采用KEY_DOWN输入空字符串KEY_UP输入按键对应名称的方法,所以需要额外做一个vk转char的函数,所幸MapVirtualKey同样具备这个功能。
此外需要多设定一组临时变量以满足可以保存设置或是取消设置的功能。
这里回顾总结下三种proc的一些特征:
“当窗口过程对消息进行处理后,应返回0。所有窗口过程不处理的消息都必须传给DefWindowProc(),DefWindowProc()的返回值必须从窗口过程返回。”
——《Windows程序设计》 55页
1,WinProc,就是最初最原始的那个,上段话讲的就是关于这个过程。
2,DlgProc,对话框过程,仅处理部分消息,处理过消息则返回TRUE,否则返回FALSE。
3,subclassEditProc,子类窗口过程,这个只管对各种消息进行处理好了,对返回值没作要求。
不过记得最后一定要Return CallWindowProc(wpOrigEditProc,hwnd,message,wParam,lParam);
最后还有个问题,许多按键默认被当做快捷键,比如F10和Alt,会激活菜单栏;Win键会激发开始菜单;App键会激发右键菜单。这样假如玩家采用这些键做操控键,即便在对话框中设置成功,在游戏中也完全无法正常使用的。
为此我重看了关于Message的各种函数,又到网上搜了半天,发现大概要用到一种叫HOOK函数的东西,SetWindowsHookEx之类。大致看了下感觉不是一两下能掌握的,出于时间紧迫的考虑,仅在自定义操控键对话框中用文字做了个提示不要用这些键的说明……
以后有空再研究解决办法吧。
(2013.8.12注:directinput里有个屏蔽win键的选项,不知能否有所帮助)
一个看似简单的自定义按键功能,前后花了有四、五天功夫,这真要命。不过等做成功了,还是感觉挺爽的,贴个图展示下:
- 游戏编程入门学习笔记32——菜单篇——自定义操控键的最终实现
- 游戏编程入门学习笔记31——菜单篇——虚拟键码到DirectInput键码的转换
- 游戏编程入门学习笔记28——菜单篇——了解MFC
- 游戏编程入门学习笔记30——菜单篇——窗口子类
- 游戏编程入门学习笔记33——菜单篇——chm文档嵌入exe
- 游戏编程入门学习笔记29——菜单篇——windows的各种“资源”、对话框
- 游戏编程入门学习笔记26——AI篇——AI的实现
- 《游戏编程入门》学习笔记7——实现抽象踢腿动作、引入耐力值
- 《游戏编程入门》学习笔记1——缘起
- 《游戏编程入门》学习笔记2——启程
- 《游戏编程入门》学习笔记4——移动控制
- 《游戏编程入门》学习笔记12——阶段性计划
- 游戏编程入门学习笔记14——寻找动画素材
- 游戏编程入门学习笔记15——添加动画
- 游戏编程入门学习笔记34——中场休息——近期的一些心得
- 《游戏编程入门》学习笔记5——关于规则的初步思考(策划)
- 《游戏编程入门》学习笔记9——关于规则的进一步思考(策划)
- Linux学习笔记——轻松学Linux shell编程(游戏菜单练习)
- 重新设置TortoiseSVN用户名和密码
- RGB和HSV颜色空间
- 2013年IC市场生变:通信领域将成最大赢家
- SQL无法使用sql身份验证,错误代码18456
- (黑马程序员)事件监听机制应用
- 游戏编程入门学习笔记32——菜单篇——自定义操控键的最终实现
- Could not initialize class sun.awt.X11GraphicsEnvironment
- Fiddler 前端调试 firefox设置 模拟Post请求
- VS错误error C3872: '0x3000': this character is not allowed in an identifier
- 我也来谈面向对象编程
- 无法解析的外部符号 _tWinMain@16
- C/C++语言中extern的用法
- ubuntu 关机,重启,注销命令
- HTTP