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

首先是在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函数第一个参数是起始字符编号,第二个参数是选中的字符数量。所以这里是将所有字符选中

 

posted @ 2017-08-16 19:52  Harley_Quinn  阅读(765)  评论(0编辑  收藏  举报