在visual 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)在这种情况下(NMaxLength)=4和nMaxLength*sizeof(TCHAR) =3所以,3<4导致了异常。
现在,我需要帮助,在一个富文本框中,我应该以哪种方式给出少于4个字符,这样这个函数就可以工作,而不会出现异常。
发布于 2017-09-22 06:56:31
当然可以了。
这个函数得到一行。你必须提供一个缓冲器,足够大到足以抵挡内容。允许传递给消息的最小缓冲区是整数的大小(4个字节)。
所接收的大小由函数返回。
这段代码总是适用于任意长度的。
CString strTemp;
nMinLength = min(nLineLength,sizeof(int));
int iLen = m_ItemTextCtrl.GetLine(k, strtemp.GetBuffer(nMinLength), nLineLength);
strTetmp.ReleaseBuffer(iLen);将数据传递给RTF控件是通过流进数据或使用SETTEXT或SetWindowText完成的。
https://stackoverflow.com/questions/46357537
复制相似问题