为什么在editBox中使用SetSel和clear函数来编写文本



假设我有一个带有文字&quot的editBox,这是edit">

然后我想把文本改成"second">

我认为这样编码是可以的:

m_edit1.SetWindowTextW(_T("this is edit"));
m_edit1.SetWindowTextW(_T("second"));

但是我看到他们使用的其他程序是这样的:

m_edit1.SetWindowTextW(_T("this is edit"));
m_edit1.SetSel(0, -1, TRUE);
m_edit1.Clear();
m_edit1.SetWindowTextW(_T("second"));

我的问题是:

如果我们可以像第一个代码示例一样覆盖它,为什么他们在这种情况下使用SetSel(),Clear()??

以下代码

m_edit1.SetSel(0, -1, TRUE);
m_edit1.Clear();

在上面给出的上下文中,没有实际用途。m_edit1.Clear()

控件发送WM_CLEAR消息

可以通过向编辑控件发送EM_UNDO消息来撤消

一旦m_edit1.SetWindowTextW(L"second")运行完成,这个机会就消失了。总之,执行问题中的第一个和第二个代码片段在可观察行为上没有区别。它们都导致一个编辑控件持有文本"second"和一个空的撤消队列。

如果确实是为了支持撤销操作,则需要调整代码以发送EM_REPLACESEL消息来代替WM_SETTEXT:

m_edit1.SetWindowTextW(L"this is edit");
m_edit1.SetSel(0, -1, TRUE);
m_edit1.ReplaceSel(L"second", TRUE);

这使得编辑控件显示文本"second",但有一个非空的撤消队列。向控件发送EM_UNDO消息将使其再次显示"this is edit"。请注意,编辑控件的撤消队列的长度不超过1。

相关内容

  • 没有找到相关文章

最新更新