我已经实现了一个音乐键盘作为Fixed的子类,其中每个键都是DrawingArea的子类,到目前为止,它工作得很好:曝光中的自定义绘图代码,按下+释放功能...的种类。请参阅此处的问题:我希望用户能够通过鼠标向下拖动鼠标来播放它。我目前捕获按钮按下和释放信号,以及进入和离开通知。不幸的是,这并不是很有效,因为一旦鼠标按下鼠标,小部件就会抓住鼠标的焦点。这对普通按钮有意义,但不适用于音乐键盘。除了将整个键盘重写为一个庞大的DrawingArea之外,还有什么好办法可以解决这个问题吗?
此外,它并不重要,但万一我使用GTK#。
答案 0 :(得分:0)
您可以考虑使用GooCanvas:您可以将每个键表示为CanvasPolylines,并使用您需要的颜色填充它们。每个Canvas项目都是GtkWidget,因此您可以对enter
,leave
,button-pressed
等事件采取行动。
这种方法似乎比单独的DrawingAreas更有意义(对我而言)。由于每个绘制的元素仍然可访问,您甚至可以动态更改颜色/大小和其他属性。此外,Polyline可让您制作更复杂的形状。