0

在 TreeView、ListBox 中,或者从我的谷歌搜索任何带有 ScrollBar 的内容中,ScrollBar 不被视为控件的一部分。

我有一个要放入自定义控件的 TreeView,它是 Dock Fill。因此,它充当了一个自定义 TreeView,它具有我们在一个地方管理它的所有逻辑。

在我们程序的某些部分中,我们根据 MouseEnter 事件将其滑出,并在 MouseLeave 事件上将其滑回,但是我们目前正在为此使用 3rd 方库的 TreeView,我的任务是替换它。

因此,我已将所有内容移至 Windows TreeView,但找不到可靠捕获 MouseLeave 的方法——仅当它离开整个 TreeView 时,包括滚动条。

我见过一种骇人听闻的解决方案,将其包装在具有多个像素的面板中并捕获面板的 MouseLeave,但我几乎不相信这是微软在这种情况下打算让我们做的事情。

简而言之:

ScrollBar 不会为控件触发 MouseEnter 或 MouseLeave,这使得使用 MouseEnter/MouseLeave 滑出控件无法使用,因为用户无法使用 ScrollBar。

处理这种情况的首选方法是什么?

4

2 回答 2

1

启动 Spy++ 并选择 Treeview 窗口。在滚动条上移动鼠标。那里有很多活动,WM_NCMOUSEMOVE 对我来说看起来不错。在 WndProc() 覆盖中捕获它。

于 2010-01-08T00:22:51.460 回答
1

在 Listbox 下放置一个具有 ListBox 精确大小的面板,包括滚动条。然后将 mouseleave 事件放在面板上。

于 2010-11-10T07:36:11.150 回答