OnKeyDown执行问题! 请教大家!!
最终目的: 在按下键盘的上下左右方向键时, i变量连续递加,CSTATIC控件显示当前i变量的值。直到检测到按键抬起。
遇到的问题: 当按下上下左右方向键时, 显示的i变量并没有递加,不知道是否 OnKeyDown被连续调用???
问题的理解: 因为对话框窗体上有很多其他控件,不能保证窗体会获得焦点,所以重载了PreTranslateMessage(MSG* pMsg) ,在PreTranslateMessage()里调用OnKeyDown,这种思路对吗??
实现代码如下:
int i;
CSTATIC m_sFileNamest;
void CWIREDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
i++;
CString s;
s.Format("%d", i);
m_sFileNamest.SetWindowText(s);
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CWIREDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CString s;
s.Format("%d", i);
m_sFileNamest.SetWindowText(s);
CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}
BOOL CWIREDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
BOOL bHandleNow = FALSE;
switch (pMsg->message)
{
case WM_KEYDOWN:
switch (pMsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
bHandleNow = TRUE;
break;
}
if (bHandleNow)
OnKeyDown(pMsg->wParam, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam));
break;
case WM_KEYUP:
switch (pMsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
bHandleNow = TRUE;
break;
}
if (bHandleNow)
OnKeyUp(pMsg->wParam, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam));
break;
}
return bHandleNow;
}