在 wxHaskell 中,控件具有可以读取或更改的附加属性。节 [Prop (Grid ())] 可以理解为“任何 Grid 类型的属性列表”。
这是 wxHaskell 处理它所构建的 wxWidgets 库是面向对象的事实的方式。Grid() 实际上表示“继承层次结构中 Grid 派生的任何东西” - 即 Grid、ScrolledWindow、Panel、Window、EvtHandler、wxObject(如果您从http://wxhaskell.sourceforge.net/ doc/Graphics-UI-WXCore-WxcClassTypes.html#204)
当您查看控件(例如 ListCtrl)的文档时,您会发现它被报告为具有一组属性和实例。基本上,您可以使用适用于 Grid 层次结构的那些。例如,Grid 派生自 ScrolledWindow,因此您可以使用:
- 属性滚动率
- Colored 类的属性,例如 bgcolor、color
- 等等
您可以按如下方式使用这些属性,例如
g <- gridCtrl parent [color := red, bgcolor := green, scrollRate := 41]
...
set g [color := blue]
逐行,代码如下所示:
- 使用提供的属性(props)
- 和一个initialWindow(将填写窗口id和初始rect和flags),按顺序调用流动的包装函数:
- gridCreate创建一个新的 Grid 实例
- 使用新的网格实例,将网格设置为 0 行、0 列且未选择任何内容。
- 将调用者提供的属性 ( props ) 应用到网格中(例如,将数据放入、设置样式等)
使代码最难阅读的部分是feed2函数,而且代码是用 '$' 样式编写的,以便为 feed2 提供正确的参数。我上面稍微挥手的解释应该就够了,但是如果你想了解细节,了解feed2只是组成倒置的函数应用程序
feed2 x y f = f x y
然后用括号替换“$”应用程序。这看起来不那么可爱,但更容易阅读。
gridCtrl parent props =
feed2 props 0
(initialWindow (\id rect ->
\props flags ->
do
g <- gridCreate parent id rect flags
gridCreateGrid g 0 0 0
set g props
return g )))