目前的帖子是帖子的延续如何禁止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 键就不能作为输入;相反,它作为控件之间的导航。我很困惑。