1. 程式人生 > >VC++ edit 編輯框自動換行

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);
}