xiaoxulee
驱动小牛
驱动小牛
  • 注册日期2004-05-05
  • 最后登录2006-07-09
  • 粉丝0
  • 关注0
  • 积分104分
  • 威望15点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2586回复:8

用VC建的MFC工程,程序里用什么函数读键盘

楼主#
更多 发布于:2005-07-01 16:40
  想在一个循环里读键盘,当指定键(想用ESC)按下后推出键盘,不知用那个函数可以读键盘,哪位大虾指点。我用MSDN查半天也找不到,用GetKeyStatus(--)也不行
xx_focus
驱动中牛
驱动中牛
  • 注册日期2003-08-06
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望10点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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;
}
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-02 22:21
对,这样就可以了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
xiaoxulee
驱动小牛
驱动小牛
  • 注册日期2004-05-05
  • 最后登录2006-07-09
  • 粉丝0
  • 关注0
  • 积分104分
  • 威望15点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于: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) 键按下,若按下则退出循环。              
       }
xiaoxulee
驱动小牛
驱动小牛
  • 注册日期2004-05-05
  • 最后登录2006-07-09
  • 粉丝0
  • 关注0
  • 积分104分
  • 威望15点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-05 09:39
xx_focus大虾,可能我没有理解你的意思。我VC刚入门,很多不懂的。
xiaoxulee
驱动小牛
驱动小牛
  • 注册日期2004-05-05
  • 最后登录2006-07-09
  • 粉丝0
  • 关注0
  • 积分104分
  • 威望15点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-08-09 08:34
还望大虾们解释一下
pxh7070
驱动牛犊
驱动牛犊
  • 注册日期2007-02-11
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-02-11 16:29
将你的循环放在另一个线程里!
GNiDiA
驱动小牛
驱动小牛
  • 注册日期2006-10-11
  • 最后登录2017-10-09
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望145点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2007-02-12 14:02
在循环里PeekMessage再检查MSG是不是按键
ytwei
驱动小牛
驱动小牛
  • 注册日期2005-04-01
  • 最后登录2010-07-30
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望102点
  • 贡献值0点
  • 好评度85点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-03-05 14:25
pxh7070说的很对,你必须把数据采集循环放到另一个线程中做,否则,数据采集一直在主线程中循环,消息就不可能得到处理的机会。
游客

返回顶部