OnKeyDown没有触发

Falleyes 2015-03-29 11:42:48
void CShipDemoDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if (m_bGamePause)
return;

CMyShip* pShip = (CMyShip*)m_Objects.GetHead(); // remember that our ship is the first object in object list

if (nChar == VK_LEFT) // turn left
{
if (pShip->GetPos().x > 0)
pShip->SetPos(pShip->GetPos().x - 5, pShip->GetPos().y);
return;
}
else if (nChar == VK_RIGHT) // turn right
{
if (pShip->GetPos().x < GAME_WIDTH - SHIP_WIDTH)
pShip->SetPos(pShip->GetPos().x + 5, pShip->GetPos().y);
return;
}
else if (nChar == VK_SPACE){
CObject* cp = m_Objects.GetHead();
m_Objects.AddTail(new CMyBomb(((CMyShip*)m_Objects.GetHead())->GetPos()));
}

// CWnd ::OnKeyDown(nChar, nRepCnt, nFlags);
}



我在调试的时候,根本没有进入这个消息函数。请问有什么办法解决吗?
...全文
344 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tinary3v0 2015-03-30
  • 打赏
  • 举报
回复
建议将OnKeyDown消息处理放到PretranslateMsg中去做。应为对话框上如果存在其他控件的话,程序的焦点(Focus)处于对话框上的控件上的话,OnKeyDown应该是被控件接收了,到不了对话框的OnKeyDown。 因此,建议到PretranslateMsg中直接拦截WM_KEYDOWN消息,然后进行处理,如果需要窗口的OnKeyDown判断一下消息的窗口句柄。
oyljerry 2015-03-30
  • 打赏
  • 举报
回复
PretranslateMsg可以捕获较多的各种消息。然后你再判断按键组合等
Eleven 2015-03-30
  • 打赏
  • 举报
回复
对话框默认是不处理WM_KEYDOWN,将你处理按键的代码放到PreTranslateMessage函数中去做。
Falleyes 2015-03-30
  • 打赏
  • 举报
回复
引用 1 楼 Tinary3v0 的回复:
建议将OnKeyDown消息处理放到PretranslateMsg中去做。应为对话框上如果存在其他控件的话,程序的焦点(Focus)处于对话框上的控件上的话,OnKeyDown应该是被控件接收了,到不了对话框的OnKeyDown。 因此,建议到PretranslateMsg中直接拦截WM_KEYDOWN消息,然后进行处理,如果需要窗口的OnKeyDown判断一下消息的窗口句柄。
引用 4 楼 VisualEleven 的回复:
对话框默认是不处理WM_KEYDOWN,将你处理按键的代码放到PreTranslateMessage函数中去做。
引用 5 楼 oyljerry 的回复:
PretranslateMsg可以捕获较多的各种消息。然后你再判断按键组合等
OK,结贴!
Falleyes 2015-03-30
  • 打赏
  • 举报
回复
引用 1 楼 Tinary3v0 的回复:
建议将OnKeyDown消息处理放到PretranslateMsg中去做。应为对话框上如果存在其他控件的话,程序的焦点(Focus)处于对话框上的控件上的话,OnKeyDown应该是被控件接收了,到不了对话框的OnKeyDown。 因此,建议到PretranslateMsg中直接拦截WM_KEYDOWN消息,然后进行处理,如果需要窗口的OnKeyDown判断一下消息的窗口句柄。
OK,明天晚上下课了回宿舍试一试!多谢指导~

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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