在MFC中使用CRichEditCtrl进行文本选择

时间:2015-02-20 07:11:09

标签: c++ winapi visual-c++ mfc win32gui

我有CRichEditCtrl对象是只读的(文本用于读取,不允许修改)。我想为使用CRichEditCtrl对象显示的文本提供带鼠标的文本选择功能。

以下代码正在努力捕获左鼠标按钮的事件 - DOWN& UP

BOOL CReportFormView::PreTranslateMessage(MSG* pMsg) 
{
    if (m_EditNs->GetFocus()!=NULL) 
    {
        switch (pMsg->message)
        {
            case WM_LBUTTONDOWN:
                return TRUE;
            case WM_LBUTTONUP:
                return TRUE;
        }
    }
}

现在正在寻找一些代码块来编写将突出显示所选文本的代码块。我想知道是否有任何可用于CRichEditCtrl对象的API有助于跟踪用户按下鼠标左键并释放的位置

2 个答案:

答案 0 :(得分:0)

您可以使用成员函数CString strText = m_myRichEditCtrl.GetSelText();或其他一些成员函数。像GetSel()一样只是一个建议。

答案 1 :(得分:0)

我认为您需要使用EM_CHARFROMPOS消息。恩。某种形式:

POINTL pt { x,y }; // ... screen coordinates to test relative to edit 
DWORD info = m_EditNS->SendMessage(EM_CHARFROMPOS, 0, pt);
int charIndex = LOWORD(info);
int line = HIWORD(info);

之后,使用正常选择方法设置选择。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb761566(v=vs.85).aspx