重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

wxWidgets第五课EVT_SIZE窗口修改事件

说明

成都创新互联公司主要从事网站建设、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务北关,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

    当父窗口的大小发生改变的时候,父窗口的OnSize函数优先调用,然后遍历子窗口的OnSize函数。在自定义控件,并且实现随着父窗口的大小,进行伸缩变换,可以创建一个比例尺因子,根据父窗口当前的大小,在父窗口的OnSize函数中调用子控件的两个方法进行子控件大小和位置的调整:

SetPosition设置子控件的位置

SetClientSize设置子控件的大小


问题

为了能够实现界面的拉伸,当窗口发生改变的时候,发出重绘事件(OnSize会调用OnPaint)进行界面的刷新,可以看到在快速伸缩窗口的情况下,非常明显看到闪烁的情况。


解析

在系统设置最佳的外观性能要求,拉伸界面的边框,会出现虚拟边框,等到鼠标弹起的时候,才会重新渲染界面,避免了闪烁。在其他的外观选项下,拉伸界面边框的时候,实时的渲染,会产生闪烁现象


真正自定义渲染

目前想到的一个解决方案:当鼠标按下拖动窗口的时候,并不进行窗口的重绘,而是等到鼠标弹起的时候,才进行重绘,这里就涉及到一个难点,该在什么地方关联鼠标弹起事件EVT_LEFT_UP,并且需要实时控制边框的渲染



注意

    当父控件销毁的时候,也会调用子控件的析构函数,对子控件进行销毁


两次进入OnSize函数的问题

    启动程序,在准备进入到主界面,渲染自定义的控件时候,检测到有两次进入到OnSize函数,导致界面在进入的时候,渲染了两次,目前不清楚是什么地方发送了两次WM_ONSIZE消息,导致该问题


怀疑方向

    1 是否是设置了父窗口指针:证实必须提供一个父窗口的指针

    2 是否是设置了扩展属性WX_EXPAND:没有理由根据


分享文章:wxWidgets第五课EVT_SIZE窗口修改事件
网页路径:http://cqcxhl.cn/article/pigpsi.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP