如何在ExampleGUIStyle中使用CL_InputDialog?

如何在ExampleGUIStyle中使用CL_InputDialog?
在这里首先要说说CL_InputDialog用的是Window的style,而Window主要有两部分组成:
1>title bar     :是存在于window pos中的子控件,位置可以设置,一般放在与Window控件(0,0)的位置
2>client window :是用于放置其它控件的子控件,一般不显视.

假如你的介面是使用ExampleGUIStyle中的代码修改过来的话,你可能会碰到下面的问题:
1.在使用InputDialog时候,Window边框很大
  原因:因为在使用CL_InputDialog的时候,这个Dialog Window会重新设置Window Size,而这个时候该Dialog Window中的
        Client Window(即get_client_area())并没有初始化,其值会很大.(它的初始化在默认的ExampleGUIStyle是在first_paint中进行的)
        因为Client Window很大,所以看起来整个InputDialog就变得过大了.

  解决方法:在CL_Window_ZZ中加入on_resize事件,并在其中设置client window的大小.
            我这里的处理过程是:计算出Window Title 的大小,然后重新设置title上的button,并根据该window的size计算出client window 的size
            总不能比实际的window要大吧.
 
2.在使用InputDialog时候,Inputbox 显视不正常
  原因:因为CL_InputBox_ZZ中没有sig_get_preferred_size的事件,即没有默认的长与宽.因此长度虽然确定了,但高度默认还是零.
  解决方法:在CL_InputBox_ZZ中添加sig_get_preferred_size事件,并将其默认高度设为比字体高度稍微高一些.

3.InputDialog中的控件对象添加在Window Title部分而不是在Window Client部分。
  原因:在CL_Window_ZZ中的on_paint->first_paint中进新了Window控件的部分初始化,而这部分代码更改了client window的位置,
        并且这个位置是以rc_main为基准的.因此尽管我们在on_resize重新设置了其client size,但在这里又失效了.
        下面是部分代码:
        //code start
        window->get_client_area()->set_position(CL_Rect(rc_main.left, rc_main.top,
            window->get_width(), window->get_height()));

        first_paint = false;
        //code end

  解决方法:删除first_paint 中的代码,并把close button的位置设定也放在on_resize中.

其实ExampleGUIStyle中的代码相应于ClanLib中默认的GUI风格 GUIStyleSilver是经过极大简化的.
从CL_Window_ZZ中的部分初始化竟然是在on_paint中可以见到。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值