【问题标题】:CEdit control MFC, placing cursor to end of string after SetWindowTextCEdit 控件 MFC,将光标置于 SetWindowText 之后的字符串末尾
【发布时间】:2010-12-01 15:21:00
【问题描述】:

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

如何做到这一点?

【问题讨论】:

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


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    【解决方案2】:

    您可以使用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);
    

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

    【讨论】:

      【解决方案3】:

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

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

      就像我有一个类似的代码

      1. 添加要编辑和调用的文本SetSel(-1)
      2. 更新静态控件

      而且光标不会停留在最后。但是当我把它改成

      1. 更新静态控件
      2. 添加要编辑和调用的文本SetSel(-1)

      我的光标显示在编辑框的末尾。

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

      【讨论】:

      • 遇到了同样的问题,但这个解决方案对我不起作用。将 SetSel(...) 更改为 PostMessage(EM_SETSEL, ...) 为我解决了这个问题,即使它留下了不好的感觉..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      相关资源
      最近更新 更多