您的位置:首页 > 其它

关于如何实现编辑框单击时自动选中全部内容的方法

2014-06-20 10:44 423 查看

本文转自:http://blog.sina.com.cn/s/blog_6b306c2001013xs3.html

我们在利用编辑框做输入时,经常需要修改输入内容,希望鼠标单击时能够自动选中当前的内容,以便可以直接进入输入新的内容,而不用先把原来内容删除掉再输入新的内容。实现这个功能有两个方法:

一、利用标准编辑框控件的SETFOCUS消息,做一个消息函数,在函数内部给编辑框发送选中文本的消息EM_SETSEL。具体做法是:

1.给编辑框增加一个控件CEdit类型的变量,这样便于访问编辑框,设为m_ed,增加变量时Category选择control,variable选择CEdit。再在编辑框右键单击,选择Class Wizard,在Message Maps标签下,找到编辑框ID,假设是IDC_EDIT1,对应的消息选择SETFOCUS,然后Add Function,再Edit Code,在函数体内部加入下面的语句:

    m_ed.PostMessage(EM_SETSEL, 0, -1);
此时再运行编译程序,就会发现在用鼠标单击编辑框时,它会自动选择当前的所有文本,可以直接输入新的内容。
2.如果不想给编辑框增加控件型的变量,通过它的容器,比如对话框也完全可以做到,因为对话框有一个成员函数GetDlgItem(),根据给定的控件ID,也可以找到编辑框。这种情况下,上面的语句可以修改为:

GetDlgItem(IDC_EDIT)->PostMessage(EM_SETSEL, 0, -1);
同样可以实现自动选中当前内容的功能,只不过省略了一个成员变量而已。

二、由于标准编辑框不接受鼠标单击消息,可以考虑从CEdit类派生一个新类CNewEdit,给这个新类增加一个消息处理器,让它能接受鼠标单击消息,在鼠标单击消息的响应函数中给编辑框发送选择全部文本的消息。具体做法是:
       在对话框上点击右键,选择Class Wizard, 在Member Variable标签下使用Add Class,选择New, Class information栏目填入新类的名称CNewEdit,Base class选择CEdit,尔后选择OK。这样就加入了一个派生于CEdit的新类CNewEdit。回到Class View中,在CNewEdit上单击右键,选择Add Windows Message Handler...,在新建Windows消息中找到WM_LBUTTONDOWN,然后Add
Handler,再Edit code,在消息处理函数中加入下列语句:
PostMessage(EM_SETSEL, 0, -1);
这样,派生的新类CNewEdit就具有了单击时自动选择当前内容的功能,从它产生的对象自然也具有这种功能。

再给编辑框增加一个控件类型的变量,变量类型选择CNewEdit,OK就可以了。实际上这个变量仅仅是把编辑框和产生的新类CNewEdit联系在一起的钮带。

以上两种实现方法各有利弊,如果只有一个编辑框需要此功能,选用第一种方法比较好。如果有多个编辑框要实现此功能,使用派生新类的方法更简单一些,不用给每个编辑框增加消息SETFOCUS的处理函数了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐