2 回答
TA贡献1816条经验 获得超4个赞
GetKeyState() 是会出现这样的问题。
按理,需要调2次,用它的状态来判断键按下了,键又抬起了,这才完成了1次按键全过程。
程序如下:
#include <windows.h>#include <iostream>using namespace std;#include <stdio.h>#pragma comment (lib, "User32.lib")
main(){int flag=0,v;do{ if (flag==0)while(1){ v=GetKeyState(VK_ESCAPE);if (v >0) {printf("%#x ",v);flag=1; break;}};if (flag==1)while(1){ v=GetKeyState(VK_ESCAPE);if (v ==0) {flag=2; break;}};if (flag==2) break; } while(1);cout << "Esc pressed." << endl; return 0;}
实际上有时是这样,有时不是这样。原因不详。
也许不能简单地用 do while,而要写完整的 API 程序,在
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
。。。
switch (message){
在这里 处理消息
}
}
如果你不是做作业,而是为了实用,那么不如直接用 getch(),返回 0x001b 就是 ESC.
#include <stdio.h>#include <stdlib.h>#include <conio.h>main( ){ int key;
while(1){
if (!kbhit()){// printf("do whatever...\n"); 做其他的事} else {key = getch(); if (key==0x001b){printf("ESC key"); break;};};}return 0;}
- 2 回答
- 0 关注
- 158 浏览
添加回答
举报
