TreeView MouseLeave event fires when moves over ScrollBar

岁酱吖の 提交于 2019-12-11 15:45:55

问题


In the TreeView, ListBox, or it seems from my google searches anything with a ScrollBar, the ScrollBar is not considered a part of the control.

I have a TreeView that I'm putting into a custom control, and it's Dock Fill. So there it acts as a custom TreeView which has all our logic to manage it in one place.

In parts of our program we slide it out based on a MouseEnter event, and slide it back in on a MouseLeave event, however we are currently using a 3rd party library's TreeView for this, which I have been tasked with replacing.

So I've moved everything over to the Windows TreeView, but can not find a way to reliable capture the MouseLeave -only- if it leaves the entire TreeView, scrollbar included.

I've seen one hackish solution of wrapping it in a panel with several pixels and capturing the MouseLeave of the panel, but I hardly believe this is what Microsoft had intended us to do in this situation.

In Short:

The ScrollBar does not fire MouseEnter or MouseLeave for the control, and that makes using MouseEnter/MouseLeave for sliding out the control unusable since the user can not use the ScrollBar.

What is the preferred way to handle this situation?


回答1:


Fire up Spy++ and select the Treeview window. Move the mouse on the scrollbar. Plenty of activity there, WM_NCMOUSEMOVE looks like a good one to me. Catch it in a WndProc() override.




回答2:


Put a panel with the exact size of the ListBox including the Scrollbar under the Listbox. Then put mouseleave event on panel.



来源:https://stackoverflow.com/questions/2024393/treeview-mouseleave-event-fires-when-moves-over-scrollbar

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!