在对话框中,按回车键实现TAB键的功能,即用回车键实现各控件之间焦点的切换?
大虾们请赐教,急用!!!

解决方案 »

  1.   

    在PreTranslateMessage(MSG* pMsg)添加代码来控制键盘输入和EDIT控件文本输出
    if( WM_KEYDOWN == pMsg->message )//按键消息
    { char t[ 100 ];
    memset( t, 0, 100 );
    HWND h = ::GetFocus();
    ::GetClassName( h, t, 100 );
    if( !strcmp( t, "Edit" ) )//是edit控件
    {
    CWnd *pWnd = GetFocus();
      
        switch(pMsg->wParam)
    {


     
       case  VK_TAB://Tab只是跳到下一控件
                case  VK_RETURN://回车键
                                NextDlgCtrl();//先设置好你的控件的TAB顺序
      return TRUE;
    break;
    //case VK_BACK_SPACE://退格,空格,删除键都对应清除
                     …
                         ………
                    // 下面的代码你继续添加           }
                }
      

  2.   

    截取回车键
    BOOL CMyDialog::PreTranslateMessage(MSG *pMsg)
    {
    if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
    {
    DWORD def_id=GetDefID();
    if (def_id!=0)
    {
    CWnd *wnd=FromHandle(pMsg->hwnd);
    char class_name[16];
    if (GetClassName(wnd->GetSafeHwnd(),
                               class_name,sizeof(class_name))!=0)
    {
    if (strnicmp(class_name,"edit",5)==0)
    {
    GetDlgItem(LOWORD(def_id))->SetFocus();
    return TRUE;
    }
    }
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
     
      

  3.   

    看错了,以为你要的是EDIT控件,呵呵当然,上面只是在各个EDIT控件间跳转,你去掉前面的判断语句可以实现所有的控件间的跳转,只要添加如下代码: CWnd *pWnd = GetFocus();
      
        switch(pMsg->wParam)
    {

       case  VK_TAB://Tab只是跳到下一控件
                case  VK_RETURN://回车键
                                NextDlgCtrl();//先设置好你的控件的TAB顺序
     return TRUE;
     break;

                     
                            ………
                        // 下面的代码你继续添加   
                   }
      

  4.   

    www.vckbase.com上又篇关于这个文章,还有实例代码
      

  5.   

    我有一个笨办法——重载OnOK()函数,在函数内
    CWnd *pWnd= GetFocus();         //取目前焦点所在控件
    if ( pWnd == NULL  )            //如果目前没有焦点把焦点放在第一个控件上
    {
    CComboBox *pCombo=NULL;
    pCombo = static_cast<CComboBox *>( GetDlgItem(IDC_COMBO1) );
    pCombo->SetFocus();
    pCombo->Clear();
    }
    else if ( pWnd == GetDlgItem( IDC_COMBO1 ) )//根据焦点目前所在的控件
                                                         //判断焦点应在的位置 
    {
    CComboBox* pCombo=NULL;
    pCombo = static_cast<CComboBox *>( GetDlgItem(IDC_COMBO2) );
    pCombo->SetFocus();
    pCombo->Clear();
    }
    else if ( pWnd == GetDlgItem( IDC_COMBO2) )
    {
    CEdit* pEdit=NULL;
    pEdit = static_cast<CEdit *>( GetDlgItem(IDC_EDIT1) );
    pEdit->SetFocus();
    pEdit->SetSel(0,-1);
    }
             ……
    这样作麻是麻烦了点儿,但在控件数量不多的情况下,那种绝对控制的感觉也不错。
      

  6.   

    呵呵,各位大虾有用 SDK 编程的吗:)
    怎么都用的 MFC 啊!!!呵呵,没什么意思,只是感慨一下。
    以上代码测试ing……