我创建了一个样式为
ES_MULTILINE
的多行编辑控件,我意识到当我按 Tab 键时,它不会将焦点更改为下一个控件。
我配置了 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);
Tab 是多行编辑控件中的有效文本字符。它不应该将焦点转移到下一个 UI 控件。如果您希望 Tab 执行此操作,则必须对 Edit 控件进行子类化以处理
WM_GETDLGCODE
(当启用 DLGC_WANTALLKEYS
时,默认情况下包括 ES_MULTILINE
),或者甚至直接按 Tab。