关于如何实现编辑框单击时自动选中全部内容的方法
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的处理函数了。
本文转自: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的处理函数了。
相关文章推荐
- js实现鼠标点击文本框自动选中内容的方法
- 【PB】如何实现单击文本框时选中所有内容
- 请教方法和例子:VS2003的datagrid控件,如何实现用鼠标拖动的方法选中任意区域的多个单元格,然后进行统一编辑??
- 【PB】如何实现单击文本框时选中所有内容
- 关于字符和数字类型的索引,Oracle如何实现内部自动转换以及索引使用的验证测试
- 如何用java实现在网页中保存html编辑器 编辑好的 html 文件?!(如blog里发文章的时候把要发表的内容以html文件的形式保存到服务器上?)
- Flex中如何给DataGrid控件的项目添加一个可编辑TextArea/TextInput,单击控件内的项目时,自动进入编辑状态
- 关于struts如何在action中实现多个处理方法
- CSS让网页(Li)中的内容自动换行的实现方法
- ssh离线下载远程服务器全部内容的实现方法
- js如何仿Google自动完成的实现方法与拼音支持的理论
- 关于图形编辑软件undo与redo的编程实现(用c++builder或delphi如何编程 ??)
- 关于字符和数字类型的索引,Oracle如何实现内部自动转换以及索引使用的验证测试
- 还有如此实现方法,没试用过,mouseEntered一个按钮的时候如何让他自动显示按钮的注释信息在一个小的注释框中??鼠标移走又小的注释框又自动消失??
- 文本框中内容全部选中 select() 方法
- 下拉列表框只能选择,我想选择后还可以允许用户对选择的内容进行修改,如何实现可编辑的下拉列表框?
- 自动换行问题,而连续的数字和英文字符常常将容器撑大,下面介绍的是CSS如何实现换行的方法
- Flex中如何给DataGrid控件的项目添加一个可编辑TextArea/TextInput,单击控件内的项目时,自动进入编辑状态
- 在点击TextEditor编辑框后,默认是选中编辑框内的全部内容,去掉默认选择内容这个效果