我用evc4.0编程,程序代码如下:
BOOL CProEdit::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class
   if(pMsg->message == WM_KEYDOWN)
switch(pMsg->wParam)
{
case VK_DOWN:
if(curLine != GetLineCount()-1)
{
curLine++;
SetCurLineSel(curLine);
}
return 1;
case VK_UP:
if(curLine != 0)
{
curLine--;
SetCurLineSel(curLine);
}
return 1; 
case VK_LEFT:  return false;
case VK_RIGHT:  return false;
default: break; } 
return CEdit::PreTranslateMessage(pMsg);
}CProEdit是我新建的edit类,,想让光标只能上下移动
现在的问题是:上下键光标不动,左右可以,请教原因

解决方案 »

  1.   

    上下键的case里面缺少了break吧?
      

  2.   

    下断点键盘响应case都是对的,return之后还是会出错,不知道问题出在哪里?
      

  3.   

    那要看的SetCurLineSel函数里怎么写的了
      

  4.   

    代码修改如下:
     
        BOOL CProEdit::PreTranslateMessage(MSG* pMsg)  
    {
    // TODO: Add your specialized code here and/or call the base class
      if(pMsg->message == WM_KEYDOWN)
    switch(pMsg->wParam)
    {
    case VK_DOWN:
    if(curLine != GetLineCount()-1)
    {
    curLine++;
    SetCurLineSel(curLine);
    }
    return FALSE;
    case VK_UP:
    if(curLine != 0)
    {
    curLine--;
    SetCurLineSel(curLine); 
    }
    return FALSE;  
    case VK_LEFT: return TRUE;
    case VK_RIGHT: return TRUE;
    default: break;}  
    return CEdit::PreTranslateMessage(pMsg);
    } 返回值错了:
       Nonzero if the message was translated and should not be dispatched; 
       0 if the message was not translated and should be dispatched.
      

  5.   

    不要return,用break,把它留给底层函数处理