我有一个 CEdit 派生控件,当基本数据为空时,该控件显示字符串“N/A”。我最近添加了代码,以在控件获得焦点时清空控件(SetWindowText(“”);),并在用户离开焦点时将其设置回“N/A”(SetWindowText(“N/A”))控空。
唯一的问题是,将窗口文本设置为“”或“N/A”会触发EN_CHANGE,因此我的对话框认为数据已更改。
如何避免在调用 SetWindowText (WM_SETTEXT) 时触发 EN_CHANGE?
NOTES
-我知道我可以将编辑控件设置为 Multiline=TRUE 但这对我来说是不可接受的。
-我的应用程序是MBCS,所以我无法使用SetCueBanner
-我想要一个优雅的解决方案。暂时将父窗口设置为 NULL 并不是一个优雅的解决方案。
EDIT:
-我希望解决方案位于我的自定义控件中,而不是位于每个对话框中
Thanks
我以前做过的方式(上次,大约 20 分钟前;事实上我正在考虑问同样的问题)是设置一个标志。当我准备以编程方式设置文本时,我设置了标志,并在 EN_CHANGE 处理程序中检查它:
void CMyDialog::MyFunction()
{
setEditTextProgramatically = true;
c_Edit.SetWindowText(_T("Whatever"));
setEditTextProgramatically = false;
}
void CMyDialog::OnEnChangeEdit()
{
if (!setEditTextProgramatically)
{
// Do whatever you need to do
}
}
我知道这不是最优雅的解决方案,但它有效,至少对我来说。
我一直想知道为什么 MFC 不提供一种方法来区分用户输入和代码更改,但事实就是如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)