gpt4 book ai didi

c++ - 发送 WM_SETTEXT 时如何避免 EN_CHANGE 通知?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:41 25 4
gpt4 key购买 nike

我有一个 CEdit 派生控件,它在底层数据为空时显示字符串“N/A”。我最近添加了代码以清空控件(SetWindowText(“”);)当它获得焦点并设置如果返回“N/A”(SetWindowText(“N/A”))当用户离开焦点时失去焦点控件为空。

唯一的问题是将窗口文本设置为“”或“N/A”会触发 EN_CHANGE,因此我的对话框认为数据已更改。

如何避免在调用 SetWindowText (WM_SETTEXT) 时触发 EN_CHANGE?

注意事项

-我知道我可以将编辑控件设置为 Multiline=TRUE 但这对我来说是 Not Acceptable 。

-我的应用程序是 MBCS,所以我不能使用 SetCueBanner

-我想要一个优雅的解决方案。暂时将父窗口设置为 NULL 并不是一个优雅的解决方案。

编辑:

-我希望解决方案在我的自定义控件中,而不是在每个对话框中

谢谢

最佳答案

我以前做过的方法(上次,大约 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 不提供区分用户输入和代码更改的方法,但事实就是如此。

关于c++ - 发送 WM_SETTEXT 时如何避免 EN_CHANGE 通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com