关于对话框中按钮与方向键的屏蔽有关问题

关于对话框中按钮与方向键的屏蔽问题,高手请进
我用基于对话框做了一个俄罗斯方块的程序,上面有“开始”“暂停”“设置”几个按钮。当按下方向键是。就会产生对按钮的焦点转移。而不响应我自己设计的按下方向键,响应消息函数。重写了PreTranslateMessage也不管用。不知道是什么原因。求高手指点,本人是菜鸟,最好写出一点点代码例子。



下面是我重写的PreTranslateMessage
C/C++ code

BOOL CTETRISDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 在此添加专用代码和/或调用基类
    if(!m_bTimeOutFlag)
    {//
        if(pMsg->wParam==WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_LEFT:
                if(CanMoveLeft())
                    MoveLeft();
                return TRUE;
            case VK_RIGHT:
                if(CanMoveRight())
                    MoveRight();
                return TRUE;
            case VK_DOWN:
                if((!IsGameOver())&&CanDown())
                {
                    if(m_speedOfLevel!=SPEED_FASTER)
                    {
                        KillTimer(1);
                        m_preSpeed=m_speedOfLevel;
                        m_speedOfLevel=SPEED_FASTER;
                        SetTimer(1,m_speedOfLevel,NULL);
                    }
                }
                return TRUE;
            case VK_SPACE:
                if((!IsGameOver())&&CanDown())
                {
                    if(m_speedOfLevel!=SPEED_FASTER)
                    {
                        KillTimer(1);
                        m_preSpeed=m_speedOfLevel;
                        m_speedOfLevel=SPEED_FASTEST;
                        SetTimer(1,m_speedOfLevel,NULL);
                    }
                }
                return TRUE;
            case VK_UP:
                if(CanRotate())
                    Rotate();
                return TRUE;
            case VK_RETURN:
                return TRUE;
            default:break;
            }//switch
        }//if(pMsg->message==WM_KEYDOWN)
        else if(pMsg->message==WM_KEYUP)  //键盘松开消息
        {
            switch(pMsg->wParam)
            {
            case VK_DOWN:
                if(!IsGameOver())
                {
                    KillTimer(1);
                    m_speedOfLevel=m_preSpeed;
                    SetTimer(1,m_speedOfLevel,NULL);
                }
                break;
            case VK_SPACE:
                if(!IsGameOver())
                {
                    m_speedOfLevel=m_preSpeed;
                    KillTimer(1);
                    SetTimer(1,m_speedOfLevel,NULL);
                }
                else
                    KillTimer(1);
                break;
            default:break;
                }
                
            }//switch
        }//else if
        else  //如果是等待时间
        {
            if(pMsg->message==WM_KEYDOWN)
            {
                switch(pMsg->wParam)
                {
                case VK_LEFT:
                case VK_RIGHT:
                case VK_DOWN:
                case VK_SPACE:
                case VK_UP:
                case VK_RETURN:
                    return TRUE;
                default:break;
                }
            }
            else if(pMsg->message==WM_KEYUP)
            {
                switch(pMsg->wParam)
                {
                case VK_DOWN:
                case VK_SPACE:
                    return TRUE;
                default:break;
                }
            }
        }
    return CDialog::PreTranslateMessage(pMsg);
}


------解决方案--------------------
很奇怪的代码:
if(pMsg->wParam==WM_KEYDOWN)
{
switch(pMsg->wParam)
既然判断pMsg->wParam是WM_KEYDOWN了,为什么又去catch这个值呢?应该是pMsg->lParam吧?
------解决方案--------------------
由于你的catch总是进入default,所以最后总是执行到return CDialog::PreTranslateMessage(pMsg);因此你这段代码就成了典型的垃圾代码了......