首先是在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(0, buf.GetLength()); } } return CDialogEx::PreTranslateMessage(pMsg); }
GetKeyState() & 0x8000是将Ctrl/Shift/Alt键与其他键作比较,Shift对应VK_SHIFT,Alt对应VK_MENU。然后其他键会存在wParam中。
CEdit::SetSel函数第一个参数是起始字符编号,第二个参数是选中的字符数量。所以这里是将所有字符选中