帮助解决此问题

时间:2011-04-11 14:33:07

标签: c++ user-interface

问题在于:

我正在使用的GUI系统的工作方式如下:

小部件可以收听鼠标事件。侦听器可以使用他们正在侦听的事件,因此,他们正在侦听的窗口小部件将不会收到事件,即使它是针对他们的,只有侦听器才会收到它。

问题出在这里:

滚动窗格里面有一个ListBox。列表框可以滚动。 Scrollpane也可以滚动。现在发生的事情是当我鼠标滚轮并且鼠标下的小部件是列表框时,列表框和滚动窗格移动。我看到的唯一解决方案是滚动窗格消耗所有鼠标滚轮事件,但是ListBox无法滚动。

我想要的行为是ListBox在有焦点时滚动,但如果我这样做,它就行不通,因为例如如果滚动窗格内的单选按钮被聚焦,我仍然希望滚动窗格滚动,它仅适用于带有滚动条的小部件,例如textbox和listbox,这是不希望的。

由于

另外,我正在使用的gui系统是我自己开发的系统。

1 个答案:

答案 0 :(得分:0)

处理此问题的常用方法是ListBox仅在事件实际滚动时使用。如果将鼠标放在列表框中并使用滚轮,则列表框会滚动直到达到其滚动限制。之后,轮子的进一步移动导致滚动窗格滚动。

显然有变种 - 重要的是决定你真正想要发生什么。

您还需要另一种滚动滚动窗格的方法,这样,如果用户明确想要滚动滚动窗格,则无需滚动到ListBox的末尾即可。 ScrollPane上的滚动条是一种方式。您还应该确保有一种方法可以在不使用鼠标滚轮的情况下滚动ListBox。