阅读:2586回复:8
用VC建的MFC工程,程序里用什么函数读键盘
想在一个循环里读键盘,当指定键(想用ESC)按下后推出键盘,不知用那个函数可以读键盘,哪位大虾指点。我用MSDN查半天也找不到,用GetKeyStatus(--)也不行
|
|
沙发#
发布于:2005-07-02 13:56
重载
BOOL PreTranslateMessage(MSG *pMsg) { switch (pMsg->message) { case WM_KEYDOWN: switch (pMsg->wParam) { case VK_RETURN://回车 break; default: OnKeyDown(pMsg->wParam, LOWORD(pMsg->lParam), HIWORD(pMsg->lParam)); break; } break; default: return CDialog::PreTranslateMessage(pMsg); break; } return TRUE; } |
|
板凳#
发布于:2005-07-02 22:21
对,这样就可以了
|
|
|
地板#
发布于:2005-07-05 09:37
谢谢一楼大虾。我还是有点不明白怎么做,我做的程序是PCI数据采集系统的程序,在循环里面等待外部触发,如果触发就进行数据采集。这样做的话如果没有外部触发,程序就会一直在循环里面。所以要用键盘退出。我重载了PreTranslateMessage(MSG* pMsg) 函数,但是好像当程序执行到循环里面后就进入不到PreTranslateMessage(MSG* pMsg) 函数里了。
BOOL CSampleView::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class switch (pMsg->message) { case WM_KEYDOWN: switch (pMsg->wParam) { case VK_RETURN://回车 triger=0; break; default: OnKeyDown(pMsg->wParam, LOWORD(pMsg->lParam), HIWORD(pMsg->lParam)); break; } break; default: return CView::PreTranslateMessage(pMsg); break; } return TRUE; } while(triger) { //读端口,看是否有外部触发,若有外部触发,退出循环,进行数据采集 in_port=*(U32*)(port+0x00); if(in_port&0x01==0) { triger=0; *(U32*)(port+0x0a)=0x01; } //判断有无ESC (这里用ENTER) 键按下,若按下则退出循环。 } |
|
地下室#
发布于:2005-07-05 09:39
xx_focus大虾,可能我没有理解你的意思。我VC刚入门,很多不懂的。
|
|
5楼#
发布于:2005-08-09 08:34
还望大虾们解释一下
|
|
6楼#
发布于:2007-02-11 16:29
将你的循环放在另一个线程里!
|
|
7楼#
发布于:2007-02-12 14:02
在循环里PeekMessage再检查MSG是不是按键
|
|
8楼#
发布于:2007-03-05 14:25
pxh7070说的很对,你必须把数据采集循环放到另一个线程中做,否则,数据采集一直在主线程中循环,消息就不可能得到处理的机会。
|
|