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-
,