跪求指导:Scintilla编辑框只能显示文本中第一个字符

visanity 2012-09-27 09:40:42
在Scintilla编辑框中显示我选中的一个文本,文本读入缓冲区后在Scintilla编辑框只显示了第一个字符
代码如下:
CString strText;
FILE* fp = fopen(LPCTSTR(rbFile), "r"); //rbFile是读入的rb文件名
char buf[256];
while(fgets(buf, sizeof(buf), fp) != NULL)
{
for (int i=0; i<256; i++)
{
// 回车符转换为回车换行符
if (buf[i] == 10 && buf[i-1] != 13)
{
buf[i] = 13;
buf[i+1] = 10;
buf[i+2] = 0;
break;
}
}
strText += buf;
}
fclose(fp);
m_wndScintilla.SetWindowText(strText);
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
visanity 2012-09-27
  • 打赏
  • 举报
回复
网上搜到一个方法,问题解决了。不过还是谢谢Dobzhansky

char *pBuffer;

CStdioFile stdFile(rbFile,CFile::modeRead);
UINT nFileLength=stdFile.GetLength();
pBuffer=new char[nFileLength+1];
nFileLength=stdFile.Read(pBuffer,nFileLength);
stdFile.Close();

if (nFileLength>0)
{
if (m_wndScintilla.SendMessage(SCI_GETREADONLY,0,0))
{
m_wndScintilla.SendMessage(SCI_SETREADONLY,FALSE,0);
}
m_wndScintilla.SendMessage(SCI_CANCEL,0,0);
m_wndScintilla.SendMessage(SCI_SETUNDOCOLLECTION,0,0);
m_wndScintilla.SendMessage(SCI_EMPTYUNDOBUFFER,0,0);

//如果文本没有只读属性,则清除所有文字。
m_wndScintilla.SendMessage(SCI_CLEARALL,0,0);

//从所有行中删除标记,若markerNumber=-1,则删除所有标记。
m_wndScintilla.SendMessage(SCI_MARKERDeleteALL,
(WPARAM)-1,0);
m_wndScintilla.SendMessage(SCI_ADDTEXT,
nFileLength,(LPARAM)pBuffer);
m_wndScintilla.SendMessage(SCI_SETUNDOCOLLECTION,1,0);
m_wndScintilla.SendMessage(EM_EMPTYUNDOBUFFER,0,0);
m_wndScintilla.SendMessage(SCI_SETSAVEPOINT,0,0);
m_wndScintilla.SendMessage(SCI_GOTOPOS,0,0);
m_wndScintilla.SendMessage(SCI_CHOOSECARETX,0,0);
/* UpdateLineNumberWidth(); */
}
delete [] pBuffer;

visanity 2012-09-27
  • 打赏
  • 举报
回复
没有SetText的调用呢,下面这篇帖子里的同志也是跟我一样调用的SetWindowText,他可以显示,但是显示有误
http://cache.baidu.com/c?m=9d78d513d9d431d94f9ee4690c66c0176e43f1652ba7d3020fa38449e3732a355010e5ac56510774a4d27d1716d94f4b9c832173474271ecc78ed31483e885295f9f5737676b845662a20edcbd5124b137e02efedb19f0bb8025e5aac5a5dd40148a0d0a20c6b6c94d0167d772b64973b8f78e48620e51ecb127658805206f82645db645fae3316c0482ebde5751c97b86611793f931a73e64e612ae490c2432a61be20a462646ea4825f9533d72c4ba0cb62f724b24b549b6bcd6b69c12ca83b4&p=8b2a964699d52dec11a7c4710e11d525&user=baidu&fm=sc&query=%BD%AB%CE%C4%B1%BE%CF%D4%CA%BE%D4%DAScintilla%B1%E0%BC%AD%BF%F2%D6%D0&qid=f23d00f01d27b758&p1=1
Dobzhansky 2012-09-27
  • 打赏
  • 举报
回复
最好看下封装代码,

我记得 Scintilla 并非使用 SetWindowText 来设置正在编辑的文本

你看看有无 SetText 调用, 这个是封装的 SCI_SETTEXT 消息, 用于设置正在编辑文本.

编辑器当前编码的消息
SCI_SETCODEPAGE 一般封装为 GetCodePage()
SCI_GETCODEPAGE SetCodePage()

visanity 2012-09-27
  • 打赏
  • 举报
回复
SetWindowText的封装我没改,直接用的Scintilla两个库
Scintilla用的是什么编码方式啊?我在缓冲区可以看到读入的文件内容了
Dobzhansky 2012-09-27
  • 打赏
  • 举报
回复
SCI_SETTEXT 是用于设置文本的
SetWindowText 封装的是哪个消息呢?

另外文件编码是否一致呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧