【发布时间】:2022-01-13 14:41:37
【问题描述】:
我必须显示下拉 TComboBox 项目的提示。
为此,我可以使用OnMouseMove 事件来处理悬停消息。它将鼠标 X,Y 客户端坐标作为参数。如果我可以确定要绘制的第一个项目(带有垂直滚动条的下拉列表),那么我可以使用 ItemHeight 值确定光标下的项目。
是否有任何 Win32 API 调用消息来获取此值? IDE 不支持此信息,或者我找不到。
【问题讨论】:
-
尝试使用
GetComboBoxInfo()获取ComboBox下拉列表的HWND,然后给列表发送LB_ITEMFROMPOINT消息, -
@RemyLebeau 我自己也收到了 CB_GETCOMBOBOXINFO 消息。感谢 LB_ITEMFROMPOINT 信息。不幸的是,我可以看到 OnMoseMove 不处理 DropDownList 鼠标事件。所以我必须在重写的 TMyForm.WndProc 中处理这些消息。但是我应该为此捕获什么样的消息? WM_MOUSEMOVE?但是我怎么知道它是 DrapDownList 事件而不是 TForm 本身触发的事件呢?
-
为此,您必须对下拉列表进行子类化,以通过
SetWindowLongPtr(GWLP_WNDPROC)或SetWindowSubclass()直接为其分配一个单独的WndProc(请参阅Subclassing controls 和How to Subclass a Combo Box)。您可以使用TComboBox.OnDropDown事件设置挂钩,然后使用TComboBox.OnCloseUp事件解除挂钩。 -
这不是一个答案,但为了用户体验,在项目上显示一个提示以选择正确的值并不是很清楚。为什么不使用对用户更不稳定的价值?
-
@Bosshoss OwnerDraw 图形组合框需要它。再好不过了。我想使用提示来显示生成图形内容所需的参数。