MFC对话框的Edit控件实现响应Ctrl+A全选,并实现自动/手动换行+滚动条

时间:2021-12-15 08:41:43

首先是在Properties中设置控件属性的问题,首先必须得将Mutilines属性设为true,才能支持多行显示。

手动换行(按Enter键换行):将Want Return属性设为true

自动换行(即文本超过edit控件宽度后换行):将Vertical Scroll设为true,将Horizontal Scroll设为false,将Auto HScroll设为false,将Auto HScroll设为true。

然后实现对Ctrl+A的响应,这里需要重载对话框类CXXXDlg的PreTranslateMessage函数

BOOL CXXXCommDlg::PreTranslateMessage(MSG* pMsg)
{
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_RECV_MSG);
if (pMsg->message == WM_KEYDOWN &&
pMsg->hwnd == pEdit->GetSafeHwnd())
{
// 响应Ctrl+A
if ((GetKeyState(VK_CONTROL) & 0x8000) && pMsg->wParam == 'A')
{
CString buf;
GetDlgItemText(IDC_EDIT_RECV_MSG, buf);
pEdit->SetSel(, buf.GetLength());
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}

GetKeyState() & 0x8000是将Ctrl/Shift/Alt键与其他键作比较,Shift对应VK_SHIFT,Alt对应VK_MENU。然后其他键会存在wParam中。

CEdit::SetSel函数第一个参数是起始字符编号,第二个参数是选中的字符数量。所以这里是将所有字符选中