2. 使用编辑控件
"编辑控件"是一个可以让用户从键盘输入和编辑文本的控件,通过它可以输入各种文本、数字或者口令,也可使用它来编辑和修改简单的文本内容。MFC类CEdit封装了编辑控件的全部操作。
使用编辑控件实现文档数据的显示的思路是,先在视图中创建一个与视图客户区大小相同的编辑控件,然后把文档的文本内容转送到编辑控件中。这里的视图客户区是指除了窗口标题栏、菜单栏、工具栏、状态栏以及边框之外的部分。简单地说,就是默认的背景色为白色的区域。
实现的步骤如下:
(1) 为CTextViewerView类添加成员变量CEdit* m_ctrlEdit。这是一个指针变量,用"添加成员变量向导"添加时,要在"变量类型"框加输入"CEdit*"(双引号不输入,注意其中的星号),而在"变量名"中输入m_ctrlEdit。
(2) 为CTextViewerView类添加OnInitialUpdate函数的重写,并添加如图10所示的代码(加框部分)。
图10 在OnInitialUpdate中添加的代码
new和delete分别用来为类对象分配和释放内存空间。为了避免m_ctrlEdit内存空间重复分配,我们在new操作前,要先将m_ctrlEdit内存空间释放。
当框架将文档与视图关联,且视图将要显示时调用OnInitialUpdate函数,因此我们将视图的一些初始化代码添加到这里。
(3) 在CTextViewerView析构函数中添加m_ctrlEdit内存空间释放的语句: if ( m_ctrlEdit ) delete m_ctrlEdit;
(4) 由于视图大小改变后,编辑控件的大小也应随之改变,因此我们需要跟踪窗口的WM_SIZE消息,只要窗口大小发生改变后,都会发送这个消息。单击CTextViewerView类属性窗口中的"消息"按钮,添加WM_SIZE消息映射。如图11所示。
图11 添加WM_SIZE的消息映射
(5) 在消息映射函数CTextViewerView::OnSize中添加如图12所示的代码。
图12 在OnSize中添加的代码
(6) 运行程序,打开当前文件夹下的ReadMe.txt文件,结果如图13所示。
图13 使用编辑控件的文档数据显示结果
评述:这种方法虽然也比较简单,且具有文本的编辑功能,但文本显示的格式还很单调,例如它的行间距和字间距无法调整,更主要的是视图的绘制功能无法起作用。