2 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
GetKeyState() 是會(huì)出現(xiàn)這樣的問題。
按理,需要調(diào)2次,用它的狀態(tài)來判斷鍵按下了,鍵又抬起了,這才完成了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;}
實(shí)際上有時(shí)是這樣,有時(shí)不是這樣。原因不詳。
也許不能簡(jiǎn)單地用 do while,而要寫完整的 API 程序,在
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
。。。
switch (message){
在這里 處理消息
}
}
如果你不是做作業(yè),而是為了實(shí)用,那么不如直接用 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;}

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
可以使用 while ((nret = GetKeyState(VK_ESCAPE)) > 0); 這樣可以在debug中查看nret的值
- 2 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)