【问题标题】:Text Selection with CRichEditCtrl in MFC在 MFC 中使用 CRichEditCtrl 进行文本选择
【发布时间】:2015-02-20 07:11:08
【问题描述】:

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

以下代码正在捕获鼠标左键的事件 - 向下和向上

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

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

【问题讨论】:

  • 我无法理解你的问题。 RTF 控件自己进行此选择。只读模式下的事件?自己做的理由是什么?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为您需要使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      相关资源
      最近更新 更多