我希望在背景上绘制(如矩形等),然后让它在其上面渲染组件。组件将基于我绘制的内容。有没有办法做到这一点?
这是一个概念的例子。这只显示矩形。所以......只需要一些方法告诉它去渲染组件。
{-# LANGUAGE PackageImports #-}
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.EventM
import Graphics.UI.Gtk.Gdk.GC
import "mtl" Control.Monad.Trans(liftIO)
main = do
initGUI
window <- windowNew
window `onDestroy` mainQuit
windowSetDefaultSize window 800 600
windowSetPosition window WinPosCenter
table <- tableNew 3 3 False
button <- buttonNewWithLabel "Test Button"
tableAttachDefaults table button 1 2 1 2
containerAdd window table
table `on` exposeEvent $ update
widgetShowAll table
widgetShowAll window
mainGUI
update = do
win <- eventWindow
liftIO $ do
gc <- gcNew win
drawRectangle win gc False 10 10 90 90
return True
答案 0 :(得分:1)
这对gtk2hs并不特别。根据{{3}},您需要在更新处理程序中return False
,以便之后也调用其他处理程序。
在您的示例中更改此按钮时,该按钮将覆盖整个窗口,因此隐藏了矩形。但是,例如,使用tableSetHomogeneous table True
可以获得所需的效果。