C语言实例教程(PDF格式)-第46部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
型:布尔值 默认值:假
相比我们在前面所讲述的几个类CButton、CBitmapButton和CStatic
而言,封装标准编辑控件的MFC类CEdit要复杂得多。表给出了在类
CEdit中定义的成员函数:
表6。 25 类CEdit中定义的成员函数
成员函数 描述
CEdit 构造CEdit控件对象
Create 创建Windows编辑控件,并将其与
CEdit对象相关联
GetSel 获得编辑控件中当前选择的开始和
结束字符的位置
ReplaceSel 使用特定的文本来替换编辑控件中
的当前选择
SetSel 设置编辑控件中所选定的字符范围
Clear 删除编辑控件中当前选定的字符
Copy 使用CF_TEXT格式将编辑控件中当前
选定的文本复制到剪贴板
…………………………………………………………Page 350……………………………………………………………
Cut 删除当前选定的字符,并将所删除
的字符复制到剪贴板
Paste 将剪贴板中格式为CF_TEXT的数据
(如果有的话)插入到编辑框中的当
前位置。
Undo 撤销最后一次编辑操作
CanUndo 决定编辑控件的操作是否可以被撤
销
EmptyUndoBuffer 重置编辑控件的undo标志
GetModify 判断编辑控件中的内容是否被修改
过
SetModify 设置或清除编辑控件中的修改标志
SetReadOnly 设置编辑控件的只读状态
GetPasswordChar 当用户输入文本时获得编辑控件中
显示的密码字符
SetPasswordChar 设置或移去当用户输入文本时编辑
控件中显示的密码字符
GetFirstVisibleLine 获得编辑控件中最上面的可见行
LineLength 获得编辑控件中一行的长度
LineScroll 滚动多行编辑控件中的文本
LineFromChar 获得包含指定索引字符的行的行号
GetRect 获得编辑控件的格式矩形
LimitText 限制用户可以在编辑控件中输入的
文本的长度
GetLineCount 获得多行编辑控件中行的数 目
GetLine 获得编辑控件中的一行文本
LineIndex 获得多行编辑控件中一行的字符索
引
FmtLines 在多行编辑控件中设置是否包含软
换行符的开关
续表6。25
…………………………………………………………Page 351……………………………………………………………
成员函数 描述
SetTabStops 在多行编辑控件中设置制表位
SetRect 设置多行文本编辑控件的格式矩形,并更新
控件
SetRectNP 设置多行文本编辑控件的格式矩形,但不重
绘控件窗口
GetHandle 获得为多行编辑控件分配的内存的句柄
SetHandle 设置供多行编辑控件使用的本地内存句柄
GetMargins 获得当前CEdit对象的左右页边距
SetMargins 设置当前CEdit对象的左右页边距
GetLimitText 获得当前CEdit对象可以包括的最大文本量
SetLimitText 设置当前CEdit对象可以包括的最大文本量
CharFromPos 获得最接近于指定位图的行和字符的索引
PosFromChar 获得指定字符索引的左上角的坐标
上面的成员函数涵盖了编辑控件在使用中的很多方面,可以满足我们
在很多情况下的绝大部分需要。这里要注意的是,一些CWnd中定义的
成员函数也是很重要的,比如说我们常用CWnd的成员函数
GetWindowText和SetWindowText来获取和设置编辑控件的文本,使用
成员函数GetFont和SetFont来获取和设置编辑控件显示文本时所使用
的字体。
编辑控件可以向父窗口发送的通知消息也要比前面讲述的几种控件
多。这些消息有:
ON_EN_CHANGE: 编辑控件不能按选定需要
ON_EN_ERRSPACE: 分配足够的内存
ON_EN_HSCROLL: 用户单击了编辑控件中的
水平滚动条。父窗口在屏
幕更新前获得此消息
ON_EN_KILLFOCUS: 编辑控件失去输入焦点
ON_EN_MAXTEXT: 当前插入内容超过了编辑
…………………………………………………………Page 352……………………………………………………………
控件中的指定的字符数,
该插入内容已被裁剪。如
果控件没有设置
ES_AUTOHSCROLL样式,那
么在插入的字符超出了编
辑控件的宽度也发送该通
知消息。同样,如果控件
没有指定ES_AUTOVSCROLL
样式,该通知也以插入操
作导致总行数超过编辑控
件的高度时发送。
ON_EN_SETFOCUS: 编辑按钮获得输入焦点
ON_EN_UPDATE: 控件已对文本作了格式
化,但尚未显示文本。通
常可以处理该消息以决定
是否需要对窗口的大小作
改变等。
ON_EN_VSCROLL: 用户单击了编辑控件的垂
直滚动条。父窗口在屏幕
更新前收到该消息。
示例程序EditDemo演示了编辑控件的一般使用方法。按如下步骤创建
该工程:
1。 使用AppWizard创建基于对话框的工程EditDemo。
2。 向工程中添加菜单资源IDR_MAINMENU,该菜单资源包括两个顶层
菜单项 “文件 (&F)”和 “编辑 (&E)”, “文件 (&F)”下包括如图6。41
所示的菜单命令。各菜单命令 (不包括具有Separator样式的菜单项)
的资源ID依次为ID_FILE_NEW和ID_FILE_EXIT。 “编辑 (&E)”菜单下
包括如图6。42所示菜单命令。各菜单命令的资源ID依次为
ID_EDIT_UNDO、ID_EDIT_CUT、ID_EDIT_COPY、ID_EDIT_PASTE、
ID_EDIT_DEL、ID_EDIT_SELECTALL和ID_EDIT_SETFONT。
图6。 41 “文件”菜单下的菜单命令
…………………………………………………………Page 353……………………………………………………………
图6。 42 “编辑”菜单下的菜单命令
3。 按图6。43在应用程序的主对话框上绘制编辑框 (对应于Control工
具箱中的图标为 ),设置其ID为IDC_EDIT,并将其Multiline属性、
Auto VScroll属性和Want return属性设置为真,同时将Auto
HScroll属性设置为假。这里,编辑框IDC_EDIT在大小和位置并不重
要,我们将在程序中对其进行调整。
4。 删除原有的 “确定”按钮和 “取消”按钮。接着打开对话框本身
的属性对话框,从Menu下拉列表框中选择IDR_MAINMENU。
图6。 43 设置主对话框的Menu属性
5。 在资源管理器中打开菜单资源IDR_MAINMENU,如图6。44所示。在
任一菜单项上单击鼠标右键,选择命令ClassWizard 。这时
ClassWizard将弹出如图6。45所示的对话框,单击Cancel。在Object
IDs处选择ID_FILE_EXIT,在Messages处选择MAND,单击And
function按钮并接受默认的处理函数名OnFileExit,在函数
OnFileExit中调用类CDialog的成员函数OnCancel,如下面的代码所
示:
void CEditDemoDlg::OnFileExit()
{
// 调用基类成员函数 OnCancel 终止对话框
OnCancel();
}
按同样的方法为ID_FILE_NEW的MAND命令添加处理函数OnFileNew
如下:
…………………………………………………………Page 354……………………………………………………………
void CEditDemoDlg::OnFileNew()
{
// 将编辑控件中的文本初始化为零,
// 并清除其撤消缓冲区。
CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
pEdit…》SetWindowText(〃〃);
pEdit…》EmptyUndoBuffer();
}}
图6。 44 在Developer Studio 的资源编辑器中打开菜单资源IDR_MAINMENU
为ID_EDIT_UNDO的MAND命令添加处理函数OnEditUndo如下:
void CEditDemoDlg::OnEditUndo()
{
// 直接调用类 CEdit 的成员函数 Undo
CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
pEdit…》Undo();
}
…………………………………………………………Page 355……………………………………………………………
图6。 45 询问是否将菜单IDR_MAINMENU与某一视类相关联
为ID_EDIT_CUT的MAND命令添加处理函数OnEditCut如下:
void CEditDemoDlg::OnEditCut()
{
// 直接调用类 CEdit 的成员函数 Cut
((CEdit*)GetDlgItem(IDC_EDIT))…》Cut();
}
为ID_EDIT_COPY的MAND命令添加处理函数OnEditCopy如下:
void CEditDemoDlg::OnEditCopy()
{
// 直接调用类 CEdit 的成员函数 Copy
((CEdit*)GetDlgItem(IDC_EDIT))…》Copy();
}
为ID_EDIT_PASTE的MAND命令添加处理函数OnEditPaste如下:
void CEditDemoDlg::OnEditPaste()
{
// 直接调用类 CEdit 的成员函数 Paste
((CEdit*)GetDlgItem(IDC_EDIT))…》Paste();
}
为ID_EDIT_DEL的MAND命令添加处理函数OnEditDel如下:
void CEditDemoDlg::OnEditDel()
…………………………………………………………Page 356……………………………………………………………
{
// 直接调用类 CEdit 的成员函数 Clear
((CEdit*)GetDlgItem(IDC_EDIT))…》Clear();
}
为ID_EDIT_SELECT的MAND命令添加处理函数OnEditSelectall如
下:
void CEditDemoDlg::OnEditSelectall()
{
int nStart;nEnd;
// 设置选定字符的开始
nStart=0;
// 设置选定字符的结尾。函数 GetWindowTextLength 返回编辑控件中文本的长度
nEnd=((CEdit*)GetDlgItem(IDC_EDIT))…》GetWindowTextLength();
// 以 nStart 和 nEnd 为参数调用类 CEdit 的成员函数 SetSel
((CEdit*)GetDlgItem(IDC_EDIT))…》SetSel(nStart;nSel);
}
为ID_EDIT_SETFONT的MAND命令添加处理函数OnEditSetfont如
下:
void CEditDemoDlg::OnEditSetfont()
{
LOGFONT lf;
static CFont font;
// 获得编辑框原来使用的字体信息,并使用该信息初始化字体对话框
CEdit *pEdit=(CEdit*)GetDlgItem(IDC_EDIT);
pEdit…》GetFont()…》GetLogFont(&lf);
CFontDialog dlg(&lf);
// 弹出字体对话框以供用户选择新的字体,
…………………………………………………………Page 357……………………………………………………………
// 并在用户确认的情况下更改编辑控件所使用的字体。
if (dlg。DoModal()==IDOK)
{
dlg。GetCurrentFont(&lf);
font。DeleteObject();
font。CreateFontIndirect(&lf);
pEdit…》SetFont(&font);
}
}