VC++ edit 編輯框自動換行
在自動換行設定的時候,要在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);
}