以下代码段来自多行CEdit控件的OnChange()处理程序,该控件设置了“WantReturn”。
void DLG::OnChangeEditPrepareTape()
{
CString ss;
std::vector<char> aTape;
m_prepareTape.GetWindowText(ss);
m_prepareTape.SetWindowText(ss);
}
如果SetWindowText()被注释掉,则用户的文本会在右侧构建,一切都很好。但是,有了它,文本插入点移动到左边缘,用户的字符进入现有字符的左侧..
我想在两个调用之间添加一些修改文本,并且可以通过继承CEdit来获得我想要的内容。但我有兴趣知道是否有一种方法可以通过Get()&amp; ()设置。
我正在使用带有Service Pack 5的Visual C ++ 6.现在已有11年了,但随后“软件不会耗尽”,因为他们说: - )。
答案 0 :(得分:2)
插入点由SetWindowText()
重置,因为从控件的角度来看,它的整个文本内容刚刚被重置(可能是空字符串),插入点和当前选择可能都没有有足够的意义来保持它们。
您可以使用GetSel()和SetSel()自行实施此行为:
void DLG::OnChangeEditPrepareTape()
{
CString ss;
std::vector<char> aTape;
int start, end;
m_prepareTape.GetSel(start, end);
m_prepareTape.GetWindowText(ss);
// Tinker with the text...
m_prepareTape.SetWindowText(ss);
m_prepareTape.SetSel(start, end);
}
答案 1 :(得分:1)
您可以在替换文本之前使用GetSel
检索光标位置,然后SetSel
将其放在同一位置。
void DLG::OnChangeEditPrepareTape()
{
CString ss;
int start, stop;
std::vector<char> aTape;
m_prepareTape.GetWindowText(ss);
m_prepareTape.GetSel(&start, &stop);
m_prepareTape.SetWindowText(ss);
m_prepareTape.SetSel(start, stop);
}
如果在将文本放回文本框之前修改文本,则可以相应地增加或减少start
(和end
)。