我发现这种情况时有发生,我似乎从来没有一个真正强大的通用解决方案。
我有一个控件-在本例中是对话框上的编辑控件。我想对用户(而且只有用户)修改编辑控件的内容做出响应。
编辑控件可以通过编程方式设置-例如,在设置对话框时,可能会在编辑字段中放置一个初始值。或者当用户从列表视图中选择一个项目时,该选择的文本很可能是放置在编辑字段中的内容。
但是当
用户
修改编辑字段的内容,我需要知道这一点,然后响应(在这个场景中,我想从相应的列表视图中清除选择)。
我现在正在研究哪个控件有焦点,并且只考虑当编辑控件有焦点时,en_change是“来自用户”的。
这在windows 7下工作得很好。
这个
在xp下失败
(我还没有测试vista)。
在xp中,如果编辑字段有焦点,但是用户单击列表视图,列表视图告诉编辑控件设置其内容,那么我将从声称仍有焦点的编辑控件获得通知(::get focus()==hwnd of edit control)。但这种不正确的状态不会在win7中出现。
这是一个分层接口,因此我无法修改列表视图通知处理程序。它获取一个选择更改,并更新编辑字段,而不需要我的参与,也不需要我真正干预,只需要从这两个字段获取通知。
有什么想法,如何一般地,永久地解决“这个控制通知真的是来自用户”的难题吗?