none
GetAsyncKeyState延迟问题 RRS feed

  • 问题

  • 我在编辑框OnChange中加入如下代码:

     if (!GetAsyncKeyState(VK_BACK)& 0x8000f)  //如果用户按的不是退格键,则进入if语句
     {
       if (bCorrected)  //判断用户是否输入正确,并发声
       {
        m_nCorrect+=1;
        PlaySound(L"res\\Type.wav",NULL,SND_FILENAME|SND_ASYNC);
       }
       else
       {
        m_nWrong+=1;
        PlaySound(L"res\\Error.wav",NULL,SND_FILENAME|SND_ASYNC);
       }

    }

    我举个现象例子:在没按退格键的前提下,我输入字符串发声都是正常的。

    但当我按下退格键后,紧接再输入一个字符时,那么无论字符是什么,都不进行发声。

    我怀疑是GetAsyncKeyState函数获得了上次退格键状态,而不是这次的。

    在这里求教各位了!

    2012年7月16日 22:43

答案

  • BOOL CXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
    	ASSERT(pEdit && pEdit->GetSafeHwnd());
    	if((WM_KEYDOWN == pMsg->message) && (pEdit->GetSafeHwnd() == pMsg->hwnd))
    	{
    		if(GetKeyState(VK_BACK) < 0)
    		{
    			AfxMessageBox(_T("BACK Key is Press Down!"));
    		}
    	}
    	return CDialog::PreTranslateMessage(pMsg);
    }
    Try this~


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年7月17日 0:56
    版主

全部回复

  • BOOL CXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
    	ASSERT(pEdit && pEdit->GetSafeHwnd());
    	if((WM_KEYDOWN == pMsg->message) && (pEdit->GetSafeHwnd() == pMsg->hwnd))
    	{
    		if(GetKeyState(VK_BACK) < 0)
    		{
    			AfxMessageBox(_T("BACK Key is Press Down!"));
    		}
    	}
    	return CDialog::PreTranslateMessage(pMsg);
    }
    Try this~


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年7月17日 0:56
    版主
  • 您好!这个方法行得通,但是我得多用个for循环,这样处理速度会变慢的。
    2012年7月17日 2:03
  • 加 for 循环?这个是在win32消息机制下,不需要用到for循环那。你是怎么做的,能分享下嘛?


    Please not forget mark your answer, and unmark your disagreed point.

    2012年7月19日 8:51
  • 您说的用到for循环指的是什么意思?为什么还用个循环?


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年7月19日 9:12
    版主