向左上运动的虚拟键盘值等问题

bzw2000 2003-08-27 12:01:26
1)初学API,只知道物体向左(VK_LEFT),向右(VK_RIGHT)都能表示,不知道向左上运动怎么表示啊?好象虚拟键盘值表里没有 是不是和计时器设定有什么关系啊

2)还有就是消息处理函数WndProc声明中的第三个参数wParam(WPARAM型的)和第四个参数lParam(LPARAM型的)有什么具体作用啊?
wParam是不是只表示虚拟键盘值??
...全文
19 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
subzero 2003-11-04
  • 打赏
  • 举报
回复
int status;

raw_key = inp(0x60);
status = inp(0x61);
outp(0x61,status & 0x80);
outp(0x61,status);
outp(0x20,0x20);

建一个键盘的isr
WQ771211 2003-11-04
  • 打赏
  • 举报
回复
请问在DOS下该怎么办呢?
我用inportb监视60端口,发现后面按下的键总是打断前面按下的键
不能获取是否两个键同时按下
DarthVader 2003-08-27
  • 打赏
  • 举报
回复
第二个问题 寻开心已经讲的很明白了
wparam和lparam是用来携带一些附属信息的
根据消息的不同而有不同含义的
比如在WM_LBUTTONDOWN里面wParam含有键盘特殊键信息(shift/ctrl是否按下等)
而lParam则包含了鼠标当时位置
DarthVader 2003-08-27
  • 打赏
  • 举报
回复
(1)如果用KeyDown/Up消息的话,不能判断键同时按下

你可以用DirectInput 来获得一张对应按键状态的表
其中的项为0,键未被按下,为1,则处于按下状态。
那么判断多个键同时按下就很简单了,只要看对应的表项是否全部为1即可。
在DX_SDK中有对DirectInput的封装,再看看例子,用起来应该不难。

不用DInput,另一个办法是自己改写键盘中断,用内嵌汇编和c都可以,思想差不多,
就是维护一张对应按键状态的表,可以同时记录不同键的状态。

还有一个办法就是用API函数GetAsyncKeyState(),加上虚拟键码,可以达到相同目的。
// these read the keyboard asynchronously
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
这个比较好用,以你的例子作个示范:
if( KEY_DOWN(VK_LEFT) && KEY_DOWN(VK_UP) )
{
// todo:add you own handling code here
......
}
寻开心 2003-08-27
  • 打赏
  • 举报
回复
左上运动是左运动+上运动
看你的键盘处理方式,如果是使用windows的消息机制,它不会直接支持这种状态的。
但是你可以使用状态查询的办法,在键盘消息当中,调用GetKeyState函数,直接检查你使用的键盘的状态,自己来处理。

wparam和lparam根据消息的性质不同,有不同的定义。如果是处理键盘,看MSDN当中WM_KEYDOWN消息的说明
flyingakain 2003-08-27
  • 打赏
  • 举报
回复
好贴!

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧