以前都是拿合作者制作好的UI框架,偶尔这次需要亲自操刀。事情是这样:用wxWidgets做一个窗口框架,左边是个可浮动的树列表窗口,右边需要一个自定义的窗口,作为框架的客户绘制区域。用wxFormBuilder,拖出一个frame,然后里面拖一个树形列表窗,这两步很简单,而且正如自己想要。结果最后的客户绘制窗口却找不到适合的控件来拖动。差点想直接用代码得了,无意中想起wxFormBuilder的自定义控件部分。试了一下果然是可以的。相关的步骤记录在下面,供有缘人参考。
1、选中制作好的窗口框架,点击标签“Addtional”下的CustomControl。这是在UI制作区域的窗口框架左边会出现一个窗口,这就是我们的自定义窗口。
我的目标是让此窗口作为框架的客户端部分供绘制。希望它跟frame的客户区域贴合,隐藏自身的标题栏、关闭框。因此,
2、右边属性中,拉到AUI部分,属性docking改成“Center”;
3、docking属性上面的RightDockable、LeftDockable、TopDockable、BottomDockable、floatable、dock fixed全部勾都去除;
4、往上的dock属性选dock(不要用float);
5、再往上找到close_button,去除勾;
6、caption_visible去除勾;
以上几步做完,我们可以看到这个新建的窗口占据了框架的客户区域部分,就是我们需要的结果。需要注意的是,上面的步骤,倒着来不会产生同样的结果(至少在wxFormBuilder中不会是同样的结果。如果制作后发现窗口是悬浮的,那么就是其中的关键几步2、3、4跟5、6顺序反了,这个是用wxFormBuilder需要知道的。
剩下的事情,我们需要填好属性栏最上面的“CustumControl”中的内容,各个一定需要填的的内容说明如下:
1、name:在代码生成时,窗口变量对应的名字
2、declaration:在代码生成时,窗口变量对应的声明
3、construction:在代码生成时,窗口被create的代码
4、#include:在代码生成时,头文件包含的声明
上面的2、3、4,wxFormBuilder完全就拷贝你写的部分带生成的代码里面,所以是我们写什么,代码里就是什么。
全文完。