CRichEditCtrl::GetLine 函数不适用于字符 < 4
CRichEditCtrl::GetLine funtion is not working for Charaters < 4
在visual studio2015年,当我试图在富文本框中输入少于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 导致异常。
现在,我需要帮助,我应该如何在富文本框中输入少于 4 个字符,以便此函数工作并且不会给出异常。
当然可以。
此函数获取一行。您必须提供一个足够大的缓冲区来容纳内容。允许传递给消息的最小缓冲区是一个整数(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 or using WM_SETTEXT or SetWindowText
完成
在visual studio2015年,当我试图在富文本框中输入少于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 导致异常。
现在,我需要帮助,我应该如何在富文本框中输入少于 4 个字符,以便此函数工作并且不会给出异常。
当然可以。
此函数获取一行。您必须提供一个足够大的缓冲区来容纳内容。允许传递给消息的最小缓冲区是一个整数(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 or using WM_SETTEXT or SetWindowText
完成