0

目前的帖子是帖子的延续如何禁止tab键在对话框内的编辑控件和按钮之间切换焦点?因为我只是认为我需要为此单独发帖。

我按照该帖子的评论使 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 键就不能作为输入;相反,它作为控件之间的导航。我很困惑。

4

0 回答 0