现在需要根据实际情况在后面动态添加更多的文本,而不删除原来内容。
我原来把所有内容都依次添加到一个字符数组中,完成之后,一次用
SetWindowText()显示
但这样比较浪费空间,
而且我不能预料总的字符数,只知道每次添加的大概字符数。
是否有更好的办法?
另外,一个CEdit中最多显示多少字符?
谢谢
13 个解决方案
#1
下面的代码在文本框最后追加"abc"
int nLength=m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
int nLength=m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
#2
当然也可以先把编辑框的内容取出来放到CString里,然后把几个CString相加
SetWindowText(str+str2..);
上面的方法更好些。
SetWindowText(str+str2..);
上面的方法更好些。
#3
取出来,相加,再放回去
#4
CEdit中最多显示多少字符可以在向导中设置的。先申明一个cedit 成员变量在确定其max_lenth
#5
先取出其中的内容,再将新的内容加上!
#6
我觉得还是laiyiling(最熟悉的陌生人) 的第一种方法好一些,效率高一点
#7
占成laiyiling(最熟悉的陌生人)做法
#8
一个CEdit中最多显示多少字符?
32k 可达64k
32k 可达64k
#9
如何在文本框中追加数据
alienmaster (小白)
http://expert.csdn.net/Expert/topic/2271/2271523.xml
描述:如果只是追加数据而不是重设整个文本框的内容?
回复人: bcpl(Relax)
下面的代码在文本框最后追加"abc"
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
回复人: bluebohe(薄荷)
文本框中的字符串只有一个,不管怎么做,最终都是str+="AAA"的效果和效率
回复人: bcpl(Relax)
结果相同,效率不同
void CEe1Dlg::OnButton1()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
for(n = 1; n < 500; n++)
{
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
}
afxDump << "ReplaceSel: " << GetTickCount() - nStartTick << "\n";
}
void CEe1Dlg::OnButton2()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
CString str;
for(n = 1; n < 500; n++)
{
m_edit.GetWindowText(str);
str += "abc";
m_edit.SetWindowText(str);
}
afxDump << "SetWindowText: " << GetTickCount() - nStartTick << "\n";
}
输出:
ReplaceSel: 240
SetWindowText: 2934
版主点评:
bcpl(Relax) 以实际编程比较了文本框追加数据和添加数据的效率问题差异,一个数量级以上的速度差异足以说明有时候一个技巧就是解决问题的必经之路。
alienmaster (小白)
http://expert.csdn.net/Expert/topic/2271/2271523.xml
描述:如果只是追加数据而不是重设整个文本框的内容?
回复人: bcpl(Relax)
下面的代码在文本框最后追加"abc"
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
回复人: bluebohe(薄荷)
文本框中的字符串只有一个,不管怎么做,最终都是str+="AAA"的效果和效率
回复人: bcpl(Relax)
结果相同,效率不同
void CEe1Dlg::OnButton1()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
for(n = 1; n < 500; n++)
{
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
}
afxDump << "ReplaceSel: " << GetTickCount() - nStartTick << "\n";
}
void CEe1Dlg::OnButton2()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
CString str;
for(n = 1; n < 500; n++)
{
m_edit.GetWindowText(str);
str += "abc";
m_edit.SetWindowText(str);
}
afxDump << "SetWindowText: " << GetTickCount() - nStartTick << "\n";
}
输出:
ReplaceSel: 240
SetWindowText: 2934
版主点评:
bcpl(Relax) 以实际编程比较了文本框追加数据和添加数据的效率问题差异,一个数量级以上的速度差异足以说明有时候一个技巧就是解决问题的必经之路。
#10
CEdit显示的字符串数目和操作系统有关,Win98下64k字节,2000下的限制宽一些,几兆没问题
#11
谢谢~
添加内容的问题我解决了。
CEdit的最大字符数不需要用程序设定吧?是不是就是系统默认的?
具体多大在哪里查呢?
添加内容的问题我解决了。
CEdit的最大字符数不需要用程序设定吧?是不是就是系统默认的?
具体多大在哪里查呢?
#12
除非你自己设定,一般都是系统默认的
win2000好像从来没有超出过限制
win2000好像从来没有超出过限制
#13
不超出限制
我就放心了
主要怕出现异常
我就放心了
主要怕出现异常
#1
下面的代码在文本框最后追加"abc"
int nLength=m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
int nLength=m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
#2
当然也可以先把编辑框的内容取出来放到CString里,然后把几个CString相加
SetWindowText(str+str2..);
上面的方法更好些。
SetWindowText(str+str2..);
上面的方法更好些。
#3
取出来,相加,再放回去
#4
CEdit中最多显示多少字符可以在向导中设置的。先申明一个cedit 成员变量在确定其max_lenth
#5
先取出其中的内容,再将新的内容加上!
#6
我觉得还是laiyiling(最熟悉的陌生人) 的第一种方法好一些,效率高一点
#7
占成laiyiling(最熟悉的陌生人)做法
#8
一个CEdit中最多显示多少字符?
32k 可达64k
32k 可达64k
#9
如何在文本框中追加数据
alienmaster (小白)
http://expert.csdn.net/Expert/topic/2271/2271523.xml
描述:如果只是追加数据而不是重设整个文本框的内容?
回复人: bcpl(Relax)
下面的代码在文本框最后追加"abc"
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
回复人: bluebohe(薄荷)
文本框中的字符串只有一个,不管怎么做,最终都是str+="AAA"的效果和效率
回复人: bcpl(Relax)
结果相同,效率不同
void CEe1Dlg::OnButton1()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
for(n = 1; n < 500; n++)
{
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
}
afxDump << "ReplaceSel: " << GetTickCount() - nStartTick << "\n";
}
void CEe1Dlg::OnButton2()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
CString str;
for(n = 1; n < 500; n++)
{
m_edit.GetWindowText(str);
str += "abc";
m_edit.SetWindowText(str);
}
afxDump << "SetWindowText: " << GetTickCount() - nStartTick << "\n";
}
输出:
ReplaceSel: 240
SetWindowText: 2934
版主点评:
bcpl(Relax) 以实际编程比较了文本框追加数据和添加数据的效率问题差异,一个数量级以上的速度差异足以说明有时候一个技巧就是解决问题的必经之路。
alienmaster (小白)
http://expert.csdn.net/Expert/topic/2271/2271523.xml
描述:如果只是追加数据而不是重设整个文本框的内容?
回复人: bcpl(Relax)
下面的代码在文本框最后追加"abc"
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
回复人: bluebohe(薄荷)
文本框中的字符串只有一个,不管怎么做,最终都是str+="AAA"的效果和效率
回复人: bcpl(Relax)
结果相同,效率不同
void CEe1Dlg::OnButton1()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
for(n = 1; n < 500; n++)
{
int nLength = m_edit.SendMessage(WM_GETTEXTLENGTH);
m_edit.SetSel(nLength, nLength);
m_edit.ReplaceSel("abc");
}
afxDump << "ReplaceSel: " << GetTickCount() - nStartTick << "\n";
}
void CEe1Dlg::OnButton2()
{
int nStartTick, n;
m_edit.SetWindowText("");
nStartTick = GetTickCount();
CString str;
for(n = 1; n < 500; n++)
{
m_edit.GetWindowText(str);
str += "abc";
m_edit.SetWindowText(str);
}
afxDump << "SetWindowText: " << GetTickCount() - nStartTick << "\n";
}
输出:
ReplaceSel: 240
SetWindowText: 2934
版主点评:
bcpl(Relax) 以实际编程比较了文本框追加数据和添加数据的效率问题差异,一个数量级以上的速度差异足以说明有时候一个技巧就是解决问题的必经之路。
#10
CEdit显示的字符串数目和操作系统有关,Win98下64k字节,2000下的限制宽一些,几兆没问题
#11
谢谢~
添加内容的问题我解决了。
CEdit的最大字符数不需要用程序设定吧?是不是就是系统默认的?
具体多大在哪里查呢?
添加内容的问题我解决了。
CEdit的最大字符数不需要用程序设定吧?是不是就是系统默认的?
具体多大在哪里查呢?
#12
除非你自己设定,一般都是系统默认的
win2000好像从来没有超出过限制
win2000好像从来没有超出过限制
#13
不超出限制
我就放心了
主要怕出现异常
我就放心了
主要怕出现异常