关键词不能为空

当前您在: 主页 > 英语 >

GetAsyncKeyState和GetKeyState

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-26 13:07
tags:

-

2021年2月26日发(作者:分度值)


键盘消息常用获取按键状态的两大函数为


GetAsyncKeySta te



GetKeyState




使用


GetKeyState()


返回一个


short


型的数,


short


型是


16


位有符号 的数据类型,如果要查询


的键被按下,返回值最高位被置


1


,则这个数表示负数,所以可以用


<0


或< /p>


>0


来判断。



另一


方面


0x8000



16


进制数,



2


进制表示为


1000


0000


0000


0 000



&


是按位与

< br>



同样,


如果键被按下,返回 值最高位为


1


,则


1xxx


xxxx


xxxx


xxxx


&


1000


0000


0000


000 0


得到的结果为


1


,否则为

< p>
0


,同样可以判断最高位的值。



两者的区别:



1



GetKeyState()


只能在键盘消息处理程 序中使用,因为它只有在线程从消息队列中读取键


盘消息时才会报告被查询键的状态,< /p>


如果需要在键盘消息处理程序以外查询按键状态,


则需

< p>
要使用


::GetAsyncKeyState


来 代替。



2



函数


GetKeyState



Get AsyncKeyState


函数不同。


GetAsyncKe yState


在按下某键的


同时调用,


判断正在按下某键。


GetKeyState


则在按过某键之后 再调用,


它返回最近的键盘


消息从


线程


的队列中移出时的键盘状态,判断刚按过了某键。




1



使用 后发现两者的区别(以组合键


CTRL+A


为例)





if (nChar ==0x041)&& (GetKeyState(VK_CONTROL)&0x8000)


//ctrl+A



{



//


执行相应的操作




}



的效果是按下


CTRL


A



实现指定的操作;


(只有先按 下


CTRL


然后按


A

< br>或者同时按下二


者,才能执行指定的操作)




而如果用




if (nChar ==0x041)&& GetAsyncKeyState(VK_CONTROL))


//ctrl+A



{



//


执行相应的操作




}


< p>
得到的效果将是:按下


CTRL


,然后按下


A


,可以执行指定的操作,但是与上述的区别在


于:按下


CTRL


后隔了一段时间(可能是几秒或更长时间)


,然后再回过来按


A


键也会执行


指定的操作(这样不是期望的效果)






2


void CMyView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)


{


if


((GetKeyState(VK_CONTROL )&0x8000)&&(GetKeyState(VK_SHIFT)&0x8000)&&(GetKey State(VK_


MENU)&0x8000))


{


AfxMessageBox(


你个牛

X


同时按下了


Ctrl+Shift+Alt


}


CView::OnKeyDown(nChar, nRepCnt, nFlags);


}



2


、鼠标消息响应函数:



afx_msg void OnMsgName(UINT nFlags, CPoint point)


中的


nFlags


参数,


例如


onLButtonDown



件中,如果你之前先同时按下


Shift



Ctrl,



nfl ags==0x00D,



MK_LBUTTON:0x001



MK_CONTROL:0x008



WK_SHIFT:0x004




例子:



void CMyView::OnLButtonDown(UINT nFlags, CPoint point)


{


//



if (nFlags==0x00D)




if((nFlags&0x00C)==0x00C)


//



if (nFlags==(MK_CONTROL+M K_SHIFT+MK_LBUTTON)),


或下面那种都可以



if(nFlags==(MK_CONTROL|MK_SHIFT|MK_LBUTTON))


{


AfxMessageBox(

你个


SB


同时按下了


Ctrl+s hift+


鼠标左键



}


CView::OnLButtonDown(nFlags, point);


}






首先说明,有好多程序或书上是


0x 8000f,


这个


f


不是十六进制的< /p>


f


而是代表浮点数。其实


&

< p>
8000


才是本质。小鱼我整理后自己写了点东西,总结一下




首先介绍一下几个概念:



按位与运算 符



:是双目运算符,其功能是参与运算的两数各对应的二进位相 与。只有对


应的两个二进位均为


1


时, 结果位才为


1


,否则为


0

< p>
。参与运算的数以补码方式出现。例


如:


0x11 & 0x12


(即


0001 0001 & 0001 001 0


)的结果是


0x10



0001 0000


);(关于


vs


取反参考附)




虚键:指的 是非字母可以明确表示的键


.


(例如


E SC BS TAB NumLock



,

< br>虚键列表见附);



物理键状态:


在操作系统的控制面板中设置鼠标左右键的映射


(实际的鼠标左键可以映射成


右键点击事件),或者通过程序也可以这样设置,这样就产生了(实际的)物理键状态;



逻辑键状态:使用



GetKeyState,GetKeyboardState,


等函数得到的逻辑键状 态,模拟按下按


键;




GetAsyncKeyState


函数功能:读取的是物理键状态,也是就 是不管你怎么鼠标键盘映射,


它只读取实际的按键状态。


MSD N


上给出了例子很恰当


For example, the call


GetAsyncKeyState(VK_LBUTTON) always returns the state of the left physical mouse


button, regardless of whether it is mapped to the left or right logical mouse butto n.


也就是


说如果你重新设置了映射,


GetAsyncKeyState


还是只读取物理状态;


< /p>


GetAsyncKeyState


的返回值:表示两个内容,一 个是最高位


bit


的值,代表这个键是否被按

< br>下,按下为


1


,抬起为


0


;一个是最低位


bit


的值,在


windowsCE


下要忽略(参考自


MSDN

-


-


-


-


-


-


-


-



本文更新与2021-02-26 13:07,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/672223.html

GetAsyncKeyState和GetKeyState的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文