为什么 Tab 键不会将焦点转移到ES_MULTILINE样式文本框中的下一个控件?[复制]

Why doesn't the Tab key shift focus to the next control in an ES_MULTILINE styled text box? [duplicate]

提问人:CristhianDev 提问时间:11/9/2023 最后编辑:CristhianDev 更新时间:11/9/2023 访问量:51

问:

我创建了一个具有样式的多行编辑控件,我意识到当我按下该键时,它不会将焦点更改为下一个控件。ES_MULTILINETab

我已经配置了IsDialogMessage和WS_TABSTOP,这是代码:

if (!IsDialogMessageA(hWnd, &msg))
{
    TranslateMessage(&msg);
    DispatchMessageA(&msg);
}
HWND hWndEdit1 = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 14, 14, 200, 21, hWnd, NULL, NULL, NULL);
HWND hWndEdit2 = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | ES_WANTRETURN, 14, 44, 200, 42, hWnd, NULL, NULL, NULL);
HWND hWndEdit3 = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 14, 95, 200, 21, hWnd, NULL, NULL, NULL);
c winapi

答:

2赞 Remy Lebeau 11/9/2023 #1

Tab 是多行“编辑”控件中的有效文本字符。它不应该将焦点更改为下一个 UI 控件。如果希望 Tab 执行此操作,则必须对 Edit 控件进行子类化以处理WM_GETDLGCODE(默认情况下包括启用时),甚至直接处理按压。DLGC_WANTALLKEYSES_MULTILINETab