目前的帖子是帖子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键就不能作为输入;而是在控件之间导航。我很困惑。