在OnSetfocusEdit1中调用SetSel(0,-1)不能实现全选文字。如果不在ON_EN_SETFOCUS中处理应该怎么弄啊
10 个解决方案
#1
m_edit.PostMessage(EM_SETFOCUS, 0, -1);
#2
好像还是不行呢。。。。
我只是想实现像IE地址栏一样,当其获得焦点时就会全选其中的文字。
我在对话框中ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1)
在OnSetfocusEdit1中调用SetSel(0,-1)不能实现全选文字。
设断点,发现获得焦点时,有调用SetSel(0,-1),但文字确并没有被选中。
发现如果是用鼠标点击使其获得焦点的话就无法全选文字,如果用TAB或其它方法时,是可以全选文字的,估计是全选后又被鼠标的单击事件给清除了,这该怎么办。。
我只是想实现像IE地址栏一样,当其获得焦点时就会全选其中的文字。
我在对话框中ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1)
在OnSetfocusEdit1中调用SetSel(0,-1)不能实现全选文字。
设断点,发现获得焦点时,有调用SetSel(0,-1),但文字确并没有被选中。
发现如果是用鼠标点击使其获得焦点的话就无法全选文字,如果用TAB或其它方法时,是可以全选文字的,估计是全选后又被鼠标的单击事件给清除了,这该怎么办。。
#3
在OnSetfocusEdit1中
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
#4
不行的,你可以试试,只要是鼠标点击使其获得焦点的,是无法全选你面的文字的
#5
不行的,你可以试试,只要是鼠标点击使其获得焦点的,是无法全选你面的文字的
那你在OnLButtonDown中加入楼上所说的
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
应该就可以了吧
那你在OnLButtonDown中加入楼上所说的
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
应该就可以了吧
#6
SetSel
#7
我试了,下面的方法是可以的:
在OnSetfocusEdit1中:
m_edit.PostMessage(EM_SETSEL, 0, -1);
注意:是发送EM_SELSET消息,而不是WM_SETFOCUS。
在OnSetfocusEdit1中:
m_edit.PostMessage(EM_SETSEL, 0, -1);
注意:是发送EM_SELSET消息,而不是WM_SETFOCUS。
#8
楼上正解.
#9
谢谢大家,
先汗自己一个,只看了消息,没注意用法,用SendMessage发消息了,改成PostMessage结果正确
先汗自己一个,只看了消息,没注意用法,用SendMessage发消息了,改成PostMessage结果正确
#10
我的程序中正在使用,是可以的
#1
m_edit.PostMessage(EM_SETFOCUS, 0, -1);
#2
好像还是不行呢。。。。
我只是想实现像IE地址栏一样,当其获得焦点时就会全选其中的文字。
我在对话框中ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1)
在OnSetfocusEdit1中调用SetSel(0,-1)不能实现全选文字。
设断点,发现获得焦点时,有调用SetSel(0,-1),但文字确并没有被选中。
发现如果是用鼠标点击使其获得焦点的话就无法全选文字,如果用TAB或其它方法时,是可以全选文字的,估计是全选后又被鼠标的单击事件给清除了,这该怎么办。。
我只是想实现像IE地址栏一样,当其获得焦点时就会全选其中的文字。
我在对话框中ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1)
在OnSetfocusEdit1中调用SetSel(0,-1)不能实现全选文字。
设断点,发现获得焦点时,有调用SetSel(0,-1),但文字确并没有被选中。
发现如果是用鼠标点击使其获得焦点的话就无法全选文字,如果用TAB或其它方法时,是可以全选文字的,估计是全选后又被鼠标的单击事件给清除了,这该怎么办。。
#3
在OnSetfocusEdit1中
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
#4
不行的,你可以试试,只要是鼠标点击使其获得焦点的,是无法全选你面的文字的
#5
不行的,你可以试试,只要是鼠标点击使其获得焦点的,是无法全选你面的文字的
那你在OnLButtonDown中加入楼上所说的
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
应该就可以了吧
那你在OnLButtonDown中加入楼上所说的
GetDlgItem(IDC_EDIT1)->SetSel(0,-1,true);
GetDlgItem(IDC_EDIT1)->SetFocus();
应该就可以了吧
#6
SetSel
#7
我试了,下面的方法是可以的:
在OnSetfocusEdit1中:
m_edit.PostMessage(EM_SETSEL, 0, -1);
注意:是发送EM_SELSET消息,而不是WM_SETFOCUS。
在OnSetfocusEdit1中:
m_edit.PostMessage(EM_SETSEL, 0, -1);
注意:是发送EM_SELSET消息,而不是WM_SETFOCUS。
#8
楼上正解.
#9
谢谢大家,
先汗自己一个,只看了消息,没注意用法,用SendMessage发消息了,改成PostMessage结果正确
先汗自己一个,只看了消息,没注意用法,用SendMessage发消息了,改成PostMessage结果正确
#10
我的程序中正在使用,是可以的