问一下做过CWnd的高手,为什么CWnd只能接收部分的WM_KEYDOWN消息 ?

ChaseTheSun787 2004-11-24 04:37:44

我派生一个CWnd的类,可是当它获得焦点后只能接收nChar为VK_A 至VK_Z 的键盘消息

void CExamBaseWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch (nChar)
{
case VK_LEFT:
MessageBox("left");
break;
case VK_RIGHT:
break;
default:
if ( (nChar >= _T('a') && nChar <=_T('z'))

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

int CExamBaseWnd::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
SetFocus();
return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
}


...全文
67 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChaseTheSun787 2004-11-24
  • 打赏
  • 举报
回复
只能用PretranslateMessage了
aeromatex_lq 2004-11-24
  • 打赏
  • 举报
回复
顶楼上的
老夏Max 2004-11-24
  • 打赏
  • 举报
回复
我在View中没有错误,参见:
void CNetworkView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
//add by qqxia
switch (nChar)
{
case VK_HOME:
OnVScroll(SB_TOP, 0, NULL);
OnHScroll(SB_LEFT, 0, NULL);
break;
case VK_END:
OnVScroll(SB_BOTTOM, 0, NULL);
OnHScroll(SB_RIGHT, 0, NULL);
break;
case VK_UP:
OnVScroll(SB_LINEUP, 0, NULL);
break;
case VK_DOWN:
OnVScroll(SB_LINEDOWN, 0, NULL);
break;
case VK_PRIOR:
OnVScroll(SB_PAGEUP, 0, NULL);
break;
case VK_NEXT:
OnVScroll(SB_PAGEDOWN, 0, NULL);
break;
case VK_LEFT:
OnHScroll(SB_LINELEFT, 0, NULL);
break;
case VK_RIGHT:
OnHScroll(SB_LINERIGHT, 0, NULL);
break;
case VK_DELETE:
AfxMessageBox("Del Selection Objects");
break;
default:
break;
}
}
老夏Max 2004-11-24
  • 打赏
  • 举报
回复
PreTranslateMessage
ChaseTheSun787 2004-11-24
  • 打赏
  • 举报
回复
为什么会这样,有什么解决办法?
DentistryDoctor 2004-11-24
  • 打赏
  • 举报
回复
还有些是WM_SYSKEYDOWN.

15,979

社区成员

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

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