首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRichEditCtrl::GetLine功能不适用于字符<4

CRichEditCtrl::GetLine功能不适用于字符<4
EN

Stack Overflow用户
提问于 2017-09-22 05:37:48
回答 1查看 222关注 0票数 0

在visual 2015中,当我试图在富文本框中写入少于4个字符时,它会出现异常(下面是附件)

在进行了调试之后,我们了解到,Ensure()是导致异常的原因:

代码语言:javascript
复制
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个字符时,

代码语言:javascript
复制
sizeof(nMaxLength)<=nMaxLength*sizeof(TCHAR)

在这种情况下(NMaxLength)=4和nMaxLength*sizeof(TCHAR) =3所以,3<4导致了异常。

现在,我需要帮助,在一个富文本框中,我应该以哪种方式给出少于4个字符,这样这个函数就可以工作,而不会出现异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 06:56:31

当然可以了。

这个函数得到一行。你必须提供一个缓冲器,足够大到足以抵挡内容。允许传递给消息的最小缓冲区是整数的大小(4个字节)。

所接收的大小由函数返回。

这段代码总是适用于任意长度的。

代码语言:javascript
复制
CString strTemp;
nMinLength = min(nLineLength,sizeof(int));
int iLen = m_ItemTextCtrl.GetLine(k, strtemp.GetBuffer(nMinLength), nLineLength); 
strTetmp.ReleaseBuffer(iLen);

将数据传递给RTF控件是通过流进数据或使用SETTEXTSetWindowText完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46357537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档