Edit Control 控件属性 添加消息 [大三TJB_708]

开发环境:Visual Studio 2010

应用程序:MFC Application

笔记主要包含Edit Control控件的常用设置、多个Edit Control控件输入时单独判断当前输入控件的内容是否符合要求、Edit Control控件对应的一些消息宏。

 

1 Edit Control常用属性设置

MFC中很多控件的常用功能都是可以通过选中相应的控件然后设置其属性的布尔逻辑值来设定控件相应的功能的。对于一个Edit Control控件,如现要此控件输入的内容居中、边框可见、只允许输入数字。则选中需要这些设置的Edit Control控件,点击右键-->properties[属性],然后在属性框中的Align Text项设置为”Center”,Border 项设置为”true”,Number项设置为”true”,其余的可默认为false。经如此设置后就对应以上对此控件的每项设置要求了。具体其它每项的含义也可以设置为true后试试。

 

在设置每个编辑框的Number项为”true”后,如果再对编辑框输入非数字的内容,则系统不会接收非数字的输入并会自动提示,如下图

 

另外,用什么消息来响应每当从一个编辑框中跳出来时输入的数据是否合理呢?我思之1  2觉得用“光标离开编辑控件”的消息来检查输入的消息是否合理。到CEdit类中查了查光标离开光标的消息宏为EN_KILLFOCUS,在MFC程序中为某个特性的Edit Control控件添加此消息( 对应的具体事件是光标从此特定的编辑控件内离开 )宏后,当此消息发生时,对应的函数就会被系统自动调用。

 

为某个特定的编辑控件添加此消息的步骤为:

 在对话框中选中此控件-->右键-->Add Event HandlerMessage type选为EN_KILLFOCUS,Class list 选继承的那个对话框类,Function handler name就默认,这个函数名[假设名为OnEnKillfocusMoneyInput]是微软取名的规范形式^-^


那么在OnEnKillfocusMoneyInput 中的内容该如何编写呢?

第一种:闪入我脑海的第一种方法是为每个控件添加变量,然后用UpdateData( TRUE | FALSE )来进行编辑框与变量之间的信息传递。

使用这种方法当OnEnKillfocusMoneyInput函数响应时,UpdateData( TRUE )无法直接将正确的数字传递给变量。所以,迅速将这个办法抛之脑后。

第二种舍弃每个控件对应的变量,直接用一般方法获取编辑控件内的内容,然后将其转化为对应的整数,然后判断输入数据的合理性,如是不合理再将光标设置回来供重新输入。直到输入合理为止。

 

2 样例

以下是一个编辑控件的代码:

//-------------------------------------------------
//当光标离开当前控件时,判断输入的数是否合理
//-------------------------------------------------
void CDMarriageMatchDlg::OnEnKillfocusMoneyInput()
{
       int i_money;
       CEdit* pEdit;
       CString CS_money;

       //获得当前输入主角自身财富值
       pEdit = (CEdit*) GetDlgItem( IDC_MONEY_INPUT );
       
       //获取Edit Control 内的内容
       pEdit->GetWindowText( CS_money );

       //将获取到的CString转换成int
       i_money = _ttoi( CS_money );

       if( i_money < 0 || i_money > 100 ){
               ::MessageBox( NULL, _T("请重新输入范围1至100的整数值"), _T("HI"), MB_OK );
                
                CEdit *pEdit = (CEdit*)GetDlgItem( IDC_MONEY_INPUT );
                pEdit->SetFocus();
                pEdit->SetSel( 0,CS_money.GetLength() );
       }
}

此函数只有在光标离开ID为的IDC_MONEY_INPUT编辑框内后才会执行。光标离开标志输入结束,于情于理于常规也是这个时候判断输入是否合理。

(1)pEdit = (CEdit*)GetDlgItem( IDC_MONEY_INPUT );表示获取ID为IDC_MONEY_INPUT 控件( Edit Control)的句柄.

(2)然后通过pEdit->GetWindowText(CS_money );来将当前编辑控件内的内容返回到CS_money中。

(3)将CString类型数据转换为int类型数据的语句i_money = _ttoi( CS_money );,网上还说了其它的版本,都报错来着。

(4)如果数据输入不合理,除了给出提示之外,还需要将光标返回到编辑框内。pEdit->SetFocus()表示将光标设在IDC_MONEY_INPUT编辑控件内;pEdit->SetSel(0,CS_money.GetLength() )表示光标的涵盖范围是从输入最开始到字符串末尾。重新输入时,上一次的整体输入都会被重新涵盖。

 

 

对于其它的控件,添加相同的Event Handler,编写类似的函数[可以将抽象为一个新的函数,然后通过参数传进去,利于代码的减少]。

 

Note Over。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值