【问题标题】:Get CBN_SELCHANGE notification when combo box item is changed on mouse hover在鼠标悬停时更改组合框项目时获取 CBN_SELCHANGE 通知
【发布时间】:2015-09-09 08:38:48
【问题描述】:

在将鼠标指针移到下拉列表框上时,是否有任何关于 WinAPI 组合框控件的通知消息可以用来知道当前项何时发生更改?

我的期望是CBN_SELCHANGE 通知也应该适用于鼠标,但不幸的是,它仅在我们使用键盘更改选择或用鼠标单击项目时发送。

【问题讨论】:

  • CBN_SELCHANGE 仅在选择真正改变时发布。将鼠标移到下拉列表框上只会更改瞬态,以呈现列表中的项目。为什么你需要了解这个实现细节? (如果你真的、真的、想要的话,你可以继承一个标准的组合框控件并自己处理鼠标消息。)。
  • @IInspectable,在我正在处理组合框的项目中,实现增量搜索。并且当指针在下拉列表框上移动时更改选择时,我们需要取消搜索。目前我们有一个处理 WM_MOUSEMOVE 并使用 CB_GETTOPINDEX 查找鼠标指针下项目的索引的例程。但显然应该有一种更简单的方法,因为组合框控件本身就是这样做的。
  • 你要重新发明Autocomplete吗?如果是这样,请考虑使用系统提供的实现。
  • @IInspectable,我们的项目中没有组合框的编辑部分。我们利用 WinAPI 组合的下拉部分为 ListView 等其他控件实现自定义编辑器。
  • 您的问题的答案是“不,没有通知消息”。解决方案是子类化并自己解决。

标签: winapi combobox notifications mousehover selectionchanged


【解决方案1】:

在您的WndProc 中侦听WM_DRAWITEM,并使用DRAWITEMSTRUCT 来确定选择。

【讨论】:

  • 一个有趣的想法。在一般情况下它会起作用,但我们只需要鼠标移动事件(另请参阅我对 IInspectable 的评论的评论)。 WM_DRAWITEM 每次需要重绘相应的项目时都会发生,但是对于某些键盘命令,我们不需要这个逻辑。与我们当前基于 WM_MOUSEMOVE/CB_GETTOPINDEX 的技术相比,我怀疑实施这种方法是否有好处。
  • @TecMan - 您可能希望将该信息添加到您的问题中。该问题暗示您当前使用的是CBN_SELCHANGE,显然不是这样。
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2012-07-21
  • 2013-12-10
  • 2014-01-20
  • 1970-01-01
相关资源
最近更新 更多