OnKeyDown执行问题!  请教大家!!

shazhushe 2006-10-30 10:14:08
最终目的: 在按下键盘的上下左右方向键时, 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;

}
...全文
232 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shazhushe 2006-11-01
  • 打赏
  • 举报
回复
对话框是非摸态的,所有的空间都是动态创建的
shazhushe 2006-11-01
  • 打赏
  • 举报
回复
有动态创建的的CBUTTON CSTATIC, 按下方向键焦点并不在对话框上,况且也不能让焦点老在对话框上啊
悲酥清风 2006-11-01
  • 打赏
  • 举报
回复
模态的?不然怎么会没焦点呢
给控件添加响应的变量,是模态的话可以得到窗口指针,给变量赋值后UpdateData(FALSE)
如果是非模态的话应该是有焦点的吧?不然你要用钩子?
hxzmm 2006-10-31
  • 打赏
  • 举报
回复
你对话框上有哪些控件,你对话框有没有获得焦点!!
shazhushe 2006-10-31
  • 打赏
  • 举报
回复
就是我上面的那段代码,你新建个基于对话框的PROJECT, 就可以修改了. 谢谢! 等
pmwl2008 2006-10-30
  • 打赏
  • 举报
回复
你在处理完之后应该马上返回,不应该让它再往下走。
hxzmm 2006-10-30
  • 打赏
  • 举报
回复
把你程序发过来,我帮你改一下!!
shazhushe 2006-10-30
  • 打赏
  • 举报
回复
TO: VISUALABC

那里的方法和我的一样啊, 实现不了我想要的结果.
继续请教大家!!!
visualabc 2006-10-30
  • 打赏
  • 举报
回复
http://www.vctop.com/View.Asp?ID=125&CateID=1
moonphy 2006-10-30
  • 打赏
  • 举报
回复
LZ可以在ONkeydown函数里面设个断点看你的函数跑了没有,跑了的话你更新下对话框界面UpdateData(FALSE)。
如果没跑可能你在PreTranslateMessage(MSG* pMsg)直接调用OnKeyDown(pMsg->wParam, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam)); 函数的做法有问题,一般都是在这个函数里面发送消息,我没有直接调用过(不过这样调用我觉得也是可行的^_^)。
shazhushe 2006-10-30
  • 打赏
  • 举报
回复
能否解释清楚??

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧