MFC学习笔记--编辑框控件

8.1 控件
控件是Windows应用系统与用户交互的主要方式。控件是由Window提供的,预先包装好的对象,带有完整的消息响应处理机制。
系统通过控件可以向用户提供消息并将用户的输入反馈回系统,由此决定之后的操作。
在一个完整的客户交互窗口中,常常包含一个或多个控件,因此控件与窗口具有父子关系。当控件发出消息通知,说明某个事件发生时,它的父窗口是消息的实际接受者。
8.2 编辑框类CEdit
编辑框用来进行文本输入和编辑。编辑框控件分为单行编辑框和多行编辑框。CEdit类是CWnd类直接派生来的,具有CWnd的所有功能。
8.2.1 创建编辑框
方法一:编辑框可以通过工具箱拖动创建;
方法二:编辑框控件可以通过编写代码创建;系统首先调用CEdit构造函数构造CEdit对象,再调用Create成员函数创建Windows编辑控件并将其与CEdit对象连接。
CEdit主要函数
    Create()                创建编辑框;
    GetWindowText()            获得窗口标题或控件正文,返回以字节为单位的实际复制字符数
    SetWindowText()            设置窗口的标题或控件正文
    GetSel()                获得编辑控件中当前选择的开始和结束字符位置
    SetSel()                在编辑控件中选择字符的范围
    ReplaceSel()            用指定文本替代编辑框中当前选择的部分
    GetWindowTextLength()    获得窗口的标题长度或控件中的正文长度
    SetModify()                设置或清除编辑控件的修改标志
    SetPasswordChar()        用户输入文本时设置或删除一个显示与编辑控件中的密码字符
    SetReadOnly()            将编辑控件设置为只读状态
CEdit控件的样式
    ES_LEFT        将文本左对齐
    ...
8.2.2 编辑框类的主要消息和方法
控件在发生某事件后,会向父窗口发出消息,父窗口通常由CDialog派生。
MFC提供了编辑框控件产生消息对应的宏,宏定义如下:
    ON_EN_CHANGE        控件内容发生变化
    ON_EN_ERRSPACE        编辑框不能申请足够的内存空间
    ON_EN_KILLFOCUS        编辑控件失去输入焦点
    ON_EN_MAXTEST        当前输入超过了指定的最大字符数
    ON_EN_SETFOUCUS        编辑控件获得输入焦点
    ON_EN_UPDATE        编辑控件要显示改变后的文本
    ON_EN_VSCROLL        用户在垂直滚动条上单击鼠标
    ON_EN_HSCROLL        用户在水平滚定条上单击鼠标


如果要处理控件发来的通知消息,在父窗口中需要为每一个消息添加一个消息映射入口和消息处理函数。
    消息映射入口可采用如下形式:
        ON_Notification(id,memberFxn);        //id指定了发送通知的编辑控件的子窗口ID,memberFxn是处理通知的父窗口成员函数的名字
    函数形式如下:
        afx_msg void memberFxn();
8.2.3 MFC编辑对话框实例
基于对话框程序的执行流程:
    1.DoModal()函数的功能:当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。
    2.当在对话框上加载消息,即我们按一下按钮,对话框就要做出一定的回应。而这一功能就交给Run()函数处理。
    
    模态对话框:
    创建了 CCalculateDlg dlg 对象时,对话框并没有显示,只是构造另一个CCalculateDlg类型的对象,直到用户调用DoModal(),对话框才会显示出来。
    dlg.DoModal()后显示一个模态对话框,此时DoModal()函数并不返回,直到用户关闭此对话框时DoModal才返回;
    CDialog::DoModal() 的返回值为 IDOK/IDCANCEL. 表明操作者在对话框上选择“确认”或“取消”按钮;
    非模态对话框:
    在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息;
    点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了;
    若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog类必须重载其基类CDialog的虚函数ONOK(),在此函数中调用DestroyWindow()销毁此对话框。

方法一:
(1)给编辑框连接变量
    对话框类的数据获取:在程序运行过程中,当向控件(如编辑框)输入值时,需要连带将值保存到对应的数据成员中;
    反之,如果数据成员的值被修改,也需要把新的值显示到编辑框中。这一机制通过DoDataExchange函数实现。
    DoDataExchange函数实现数据动态绑定,void AFXAPI DDX_Text(CDataExchange * pDx,int nIDC,double& value); 函数DDX_Text使用变量value的引用,因此控件nIDC与变量之间仅仅是使用关系,变量通过框架传递给控件。
    函数DDX_Text必须通过函数UpdateDate();内部调用,该函数是MFC的窗口函数,用来刷新数据; BOOL UpdateData(BOOL bSaveAndValidate=true); 参数bSaveAndValidate用于指示数据的传输方向,TRUE将数据从控件传送到对应的数据成员,FALSE将数据从数据成员传送给对应的控件。
(2)按钮控件连接代码
    在“+”按钮上选择“添加事件处理程序”,弹出“事件处理程序向导”,在消息类型列表框中选择BN_CLICKED项,单击按钮事件。

方法二:
Format函数
在MFC程序中,可以使用Format方法方便地实现int、float和double等数字类型转换为CString字符串。
CString的Format支持的格式说明:
    %c        单个字符
    %d        十进制整数(int)
    %ld        十进制整数(long)
    %f        十进制浮点数(float)
    %lf        十进制浮点数(double)
    %e        指数形式输出实数
    %g        选用f与e格式中输出宽度较小的格式,不输出0
    %o        八进制数
    %s        字符串
    %u        无符号十进制数
    %x        十六进制数
    
在VS环境中CString的运算需要用“_T”来表示
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    


 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值