【问题标题】:CRichEditCtrl::GetLine funtion is not working for Charaters < 4CRichEditCtrl::GetLine 函数不适用于 Characters < 4
【发布时间】:2017-09-22 05:37:48
【问题描述】:

在 Visual Studio 2015 中,当我尝试在富文本框中写入少于 4 个字符时,会出现异常(以下是附件)

在调试之后,我们知道 Ensure() 导致了异常:

int CRichEditCtrl::GetLine(_In_ int nIndex, _Out_writes_to_(nMaxLength, return) LPTSTR lpszBuffer, _In_ int nMaxLength) const
    {
        ASSERT(::IsWindow(m_hWnd));
        ENSURE(sizeof(nMaxLength)<=nMaxLength*sizeof(TCHAR)&&nMaxLength>0);
        *(LPINT)lpszBuffer = nMaxLength;
        return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
    }

当我们在富文本框中输入少于 4 个字符时,

sizeof(nMaxLength)<=nMaxLength*sizeof(TCHAR)

在这种情况下 sizeof(nMaxLength) = 4 和 nMaxLength*sizeof(TCHAR) = 3 所以,3

现在,我需要帮助,我应该如何在富文本框中给出少于 4 个字符,以便此函数正常工作并且不会给出异常。

【问题讨论】:

标签: c++ visual-studio-2015 mfc richtextbox


【解决方案1】:

当然可以。

这个函数获取一行。你必须提供一个足够大的缓冲区来存储内容。允许传递给消息的最小缓冲区是整数大小(4 个字节)。

您收到的大小由函数返回。

此代码始终适用于任何长度

CString strTemp;
nMinLength = min(nLineLength,sizeof(int));
int iLen = m_ItemTextCtrl.GetLine(k, strtemp.GetBuffer(nMinLength), nLineLength); 
strTetmp.ReleaseBuffer(iLen);

将数据传递给 RTF 控件由 streaming in data 或使用 WM_SETTEXTSetWindowText 完成

【讨论】:

  • 感谢您的回复。您的意思是我必须在富文本框中提供至少 4 个字符吗?但我也想在富文本框中传递少于 4 个字符。那么我怎样才能传递少于 4 个字符呢?请帮助我。
  • 但是,我想在给出字符
  • 再次:您需要提供一个缓冲区。您必须指定大于 4 个字符的缓冲区。如果该行少于 4 个字符,则缓冲区仅使用到该点。你得到的长度被返回。我已经回答了这个问题。
  • 比指定nMinLength这个尺寸!
  • @xMRi 示例代码中的错误。应该是nMinLength = max(nLineLength,sizeof(int));。目前你的nMinLength 总是4。GetLine() 的最后一个参数应该是nMinLength
猜你喜欢
  • 2012-01-10
  • 2013-06-23
  • 1970-01-01
  • 2012-09-19
  • 2013-03-21
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多