CRichEditCtrl :: GetLine功能不适用于Charaters< 4

时间:2017-09-22 05:37:48

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

在visual studio 2015中,当我尝试在Rich Text Box中写入少于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);
    }

当我们在Rich Text Box中提供少于4个字符时,

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

在这种情况下sizeof(nMaxLength)= 4和nMaxLength * sizeof(TCHAR)= 3 因此,3&lt; 4导致异常。

现在,我需要帮助以哪种方式在Rich Text Box中提供少于4个字符,以便此函数有效并且不会产生异常。

1 个答案:

答案 0 :(得分:0)

确实有效。

此功能获得一条线。你必须提供一个足够大的缓冲区来填充内容。允许传递给消息的最小缓冲区是整数(4个字节)的大小。

函数返回您收到的大小。

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

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

通过streaming in data或使用WM_SETTEXTSetWindowText

将数据传递到RTF控件