如何使Tab键将Tab字符输入到焦点编辑控件而不是在对话框控件之间导航?

时间:2013-08-28 05:04:12

标签: mfc

目前的帖子是帖子How to disallow tab key to switch focus between edit control and button within dialog box?的延续,因为我只是觉得我需要另外发帖。

我按照该帖子上的评论使Tab键在其编辑控件中输入Tab字符:

我创建了从EditCode派生的CEdit类,并且我覆盖了方法:

 afx_msg UINT OnGetDlgCode()
 {
     UINT uiCode = CEdit::OnGetDlgCode();
     uiCode |= DLGC_WANTTAB;
     return uiCode;
 }

我在类的消息映射中添加了相应的处理程序条目:

BEGIN_MESSAGE_MAP(EditCode, CEdit)
    ON_WM_GETDLGCODE()
END_MESSAGE_MAP()

我还在对话框类中添加了一个EditCode类型的变量,但我还是无法修复它。

我尝试按以下方式覆盖WindowProc

LRESULT CEditCode:: WindowProc(
   UINT message,
   WPARAM wParam,
   LPARAM lParam 
)
{
    // TODO: Add your specialized code here and/or call the base class
    LRESULT lres;
    switch (message) {
    case WM_GETDLGCODE:
        lres = CEdit::WindowProc(message, wParam, lParam);
        lres |= DLGC_WANTTAB;
        return lres;
    }
    return CEdit::WindowProc(message, wParam, lParam);
}

但直到现在,我都没有成功。

修改 我现在能够通过返回

使Tab键输入Tab字符
  (DLGC_WANTCHARS | DLGC_WANTARROWS | DLGC_WANTTAB | DLGC_WANTALLKEYS). 

我希望Shift + Tab键组合仍可用于导航,因此我写道:

if(GetKeyState(VK_SHIFT) < 0 )
{
   return CEdit::WindowProc(message, wParam, lParam);
}

工作正常,但只要按Shift + Tab进行导航并返回编辑框,Tab键就不能作为输入;而是在控件之间导航。我很困惑。

0 个答案:

没有答案