八宝书库 > 文学其他电子书 > C语言实例教程(PDF格式) >

第46部分

C语言实例教程(PDF格式)-第46部分

小说: C语言实例教程(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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);  



}  



}  

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的