【发布时间】:2010-02-05 16:20:53
【问题描述】:
我发现这种情况时有发生,而且我似乎从来没有一个真正强大的通用解决方案。
我有一个控件——在这个例子中是一个对话框上的 EDIT 控件。我想采取某些行动来响应用户 - 并且只有用户 - 修改编辑控件的内容。
可以通过编程方式设置编辑控件 - 例如在设置对话框时,可能会在编辑字段中放置一个初始值。或者当用户从列表视图中选择一个项目时,该选择的文本很可能就是放置在编辑字段中的内容。
但是当 用户 修改编辑字段的内容时,我需要知道这一点并做出响应(在这种情况下,我想从对应的列表视图)。
我目前正在查看哪个控件具有焦点,并且如果编辑控件具有焦点,则仅将 EN_CHANGE 视为“来自用户”。
这在 Windows 7 下运行良好。这在 XP 下失败(我还没有测试过 Vista)。
在 XP 中,如果编辑字段具有焦点,但用户单击列表视图,并且列表视图告诉编辑控件设置其内容,那么我会收到来自编辑控件的通知,声称仍然有焦点(::GetFocus() == 编辑控件的 HWND)。但是这种不正确的状态在Win7中不会出现。
这是一个分层接口,所以我不能修改列表视图通知处理程序。它会更改选择并更新编辑字段,而无需我参与或真正干预,而不是从他们俩那里获得通知。
关于如何普遍、永久地解决“此控件通知是否真的来自用户”难题的任何想法?
【问题讨论】:
标签: c++ windows mfc winapi notifications