CEdit控制MFC,将光标放在SetWindowText之后的字符串末尾

时间:2009-09-26 09:47:47

标签: c++ mfc visual-c++

我正在使用VC9,我有一个CEdit控件,其内容被重置为默认测试(比如 - “填充”),只需单击一个按钮,然后我调用SetFocus进行CEdit控件。问题是光标在默认文本的开头闪烁,我希望它闪烁默认字符串的结尾。

如何做到这一点?

3 个答案:

答案 0 :(得分:14)

您可以使用CEdit::SetSel来完成此操作。

示例:

CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);
e->SetWindowText("hello world");
e->SetFocus();
e->SetSel(0,-1); // select all text and move cursor at the end
e->SetSel(-1); //  remove selection

答案 1 :(得分:7)

您可以使用CEdit::SetSel来完成此任务:

CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);

e->SetWindowText("hello world");

// e->SetSel(0,-1);   // you don't need this line

e->SetFocus();
e->SetSel(-1);

它会将光标放在字符串的末尾。

答案 2 :(得分:0)

我有一个奇怪的发现,但仍与之相关。 这个解决方案最初对我不起作用。即使在调用 SetSel(-1)之后,我的光标也移动到了编辑框的顶部。 然后我做了一些代码重新洗牌,它开始工作了。

学习是如果我在更新编辑控件后更新任何其他控件,光标将移动到编辑框的顶部。但如果编辑框是最后一个控件更新,则光标将保留在编辑框的末尾。

就像我有一个类似

的代码
  1. 添加要编辑的文字&调用 SetSel(-1)
  2. 更新静态控制
  3. 光标不会停留在最后。但是当我把它改成

    1. 更新静态控制
    2. 添加要编辑的文字&调用 SetSel(-1)
    3. 我的光标显示在编辑框的末尾。

      自从我在这里发现更新知识库的那一天起,我才想起它。希望它有助于一些随机的灵魂,即使在调用API之后光标也会跳到编辑框的顶部。