CEdit類編輯框、CRichEditCtrl類富文本編輯框是VC中最重要的控件之一。後者最大的特色在于可以設置文本字體、顔色、鍊接,插入圖片等等格式化操作。編輯框默認支持15000左右的字符,富文本編輯框大約是35000左右,但兩者都可以通過其類的方法來調整這一數值。另外,富文本框可以用"\r\n"控制換行,普通文本框不能識别。CEdit沒有ctrl A的快捷鍵,richedit有;CEdit有右鍵菜單,CRichEditCtrl沒有(需要自定義創建)。
1 使用富文本編輯框先要初始化與編輯框使用不同的是,使用富文本框之前需要先調用AfxInitRichEdit()這個全局函數來初始化這個控件,否則程序啟動後又自動退出了。
另外,AfxInitRichEdit()裝載的隻是RichEdit 1.0版本,2.0有更多的功能:
RichEdit2.0A自動為寬字符(WideChar),所以它可以解決中文亂碼以及一些漢字問題;
RichEdit2.0A可設置行間距;
以下是初始化RichEdit并加載控件dll的代碼:
test.cpp HMODULE hMod; //增加一全局變量 bool CTestApp::InitInstance() { …… AfxInitRichEdit(); //裝載 RichEdit 1.0 CONTROL (RICHED32.DLL) hMod = LoadLibrary(_T("RICHED20.DLL")); //加載 Riched20.dll(Riched32.dll) …… } // 加載dll也可以在InitDialog中進行 BOOL CTestApp::::ExitInstance() { …… FreeLibrary(hMod); …… } 在對話框上放一個IDC_RICHEDIT1,文本方式打開.rc文件修改該richedit控件的類名"RICHEDIT" to "RichEdit20a".
Richedit20A的圖框變成了黑色,也調不出正常的屬性對話框,原因是在Records.rc文件中以下内容中有增加20A字樣,改回即可。
CONTROL "",IDC_RICHEDIT1,"RICHEDIT20A",WS_TABSTOP,134,65,307,18
2 編輯框和富文本框的屬性設置要使富文本框或編輯框可以自由的編輯,先要設置一下屬性。右擊控件,單擊屬性,在屬性欄中,将【Vertical Scroll】設為True,可以讓垂直滾動條生效。水平滾動條則是【Horizontal Scroll】。【Want Return】設置為True,可以使富文本框接受回車換行,否則回車不會進行換行。當然要使富文本框有多行編輯功能,要将【Multiline】屬性設置為True。
3 編輯框和富文本框都可以設置為value或control類型的變量。
value類型相當于基本數據類型,可以是CString、int、long、float、double、UINT、double、short、bool等類型。這種類型的變量可以直接使用賦值符号=去賦值,然後用全局函數UpdateData()與控件交換數據。(當然,如果選擇的是CString,CString本身又是VC中的一個類,可以有諸多的方法可以調用。)如:
UpdateData(1); // 将控件上的值讀入關聯變量 m_edit1 = "cm"; // value類型的m_edit1如果選擇的是CString,就可以使用CString類型相同的操作, // 如果選擇的是int,就可以使用int類型相同的操作 UpdateData(false); // 更新,将關聯變量的值更新到控件上
control類型其實定義的是一個對象,編輯框定義的是CEdit類的對象,富文本框定義的是CRichEditCtrl類的對象。自然,有諸多的方法可以調用,諸多的屬性可以使用,與控件的交互也是通過這些屬性和方法來進行的。關于各自類的方法和屬性及構造函數見後面的圖片。
如下圖,一個控件在定義了value類型後,還可以接着再定義control類型:
全局函數GetDlgItem(control ID)可以返回一個對象指針,與control對象有相同的方法和屬性可以調用。
另外,控件還可以聲明和定義派生類,并可以用派生類來為該類控件實例化對象,然後用實例化後的對象來引用派生類定義的屬性和方法。
如有一個CEdit控件,其ID是IDC_edit1,關連了一個control變量m_cedit,便可以使用如下代碼與控件交換數據:
CString str1, str2; GetDlgItem(IDC_edit1)->GetWindowText(str1); m_cedit1.GetWindowText(str2);
需要注意的是,value類型因為是普通的基本數據類型,一般都可以使用賦值操作符。而control類型定義的是對象,隻能使用對象訪問成員的操作符“.”,而GetDlgItem(IDC_edit1)返回的是一個對象指針,隻能使用指針訪問成員的操作符“->”。
4 默認最高上限字符數量調整CDialog::OnInitDialog(); { …… m_textblock.LimitText(1000000); // 設置文本框可以容納的字數上限; //CEdit類使用的是SetLimitText(); …… }
5 随内容自動滾動控制m_Log.SetWindowText(strs);// m_Log為Control控件變量 m_Log.LineScroll(m_Log.GetLineCount());
6 CEdit類和CRichEditCtrl類定義的屬性和方法
-End-
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!