1、最基本的:把水平自动滚动关掉, 垂直自动滚动打开
2、在用户在Edit框框中输入数据时,当CString > 30 时,令其自动换到下一行。
这个你可以在它的属性里面Styles ->Multiline这样项选择上,还有一项Want return
然后就可以加入你的换行语句了/r/n就行了
在自动换行设置的时候,要在EDIT控件的属性中选中"multiline"的属性和Auto_HScroll、Vertical scroll。
经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。
方法一: (当EDIT映射到一CString时)
m_String = m_String + sNewString + "/r/n"
//自动换行(其中m_String是EDIT筐所关联的CString对象)
UpdateData(false);
此法只能做到自动换行,不会自动滚屏到最后一行。
方法二: (当EDIT映射到一EDIT时)
m_Edit.SetSel(-1, -1); //自动滚屏(其中m_Edit是EDIT筐所关联的EDIT控制对象)
m_Edit.ReplaceSel(sNewString+"/r/n"); //自动换行
此法可以做到自动换行,并自动滚屏到最后一行。
以上,m_String、m_Edit.分别为给编辑框添加的成员变量;sNewString 为要显示的字符串
使用上面两种方法是要注意,他们只使用于静态的换行,如果要想实现动态换行,也就是说使用编辑框输入的时候,如果输入的字符串超过了编辑框的宽度,这时候就换行,则要使用第三种方法
方法三:m_EventEdit是与编辑框关联的控件变量,m_EventString是与编辑框关联的字符串变量
CRect EditRect(0,0,0,0),FontRect(0,0,0,0);
int EditWidth=0;
int FontWidth=0;
m_EventEdit.GetRect(&EditRect);
EditWidth=EditRect.Width();
CClientDC dc(this);
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
CFont font;
font.CreateFontIndirect(&ncm.lfMessageFont);
// 将字体选进DC
CFont* pOldFont = dc.SelectObject(&font);
// 计算文本大小
UpdateData(TRUE);
dc.DrawText(m_EventString, FontRect, DT_CALCRECT);
// 回复旧字体-这是必须的
dc.SelectObject(pOldFont);
FontWidth=FontRect.Width();
//如果字符串宽度大于编辑框宽度,则换行
if(FontWidth>=EditWidth)
{
m_EventString+="/r/n";
// Add soft line-break breaks.
m_EventEdit.FmtLines(TRUE);
// Dump the text of the edit control.
afxDump << m_EventString;
// Remove soft line-break breaks.
m_EventEdit.FmtLines(FALSE);
}