想在Frame窗口上显示时钟信息,因为没有系统的学习wxwidgets,自己想了一种最笨的方案,见笑。
一、实现方案:
1、原始方案:
用wxDateTime获取当前的时间,赋给一个wxString类的参数。但是如果只采用DrawText写文本,第二次之后就会覆盖前一次的文本。
2、改进后的方案:
先用DrawRectangle画一个确定大小、确定位置的矩形框,再用DrawText写文本,将上述操作封装进入OnTimer中,用wxTimer类的实例来定时触发wxTimerEvent后调用OnTimer,就能实现不停的刷新时间。
二、关于wxTimer的使用:
wxTimer类允许使用者以特定的间隔时间执行代码。其实现原理是计数器记满预设的时间之后会触发事件wxTimerEvent,触发事件EVT_TIMER调用OnTimer,在OnTimer函数中可以写入你想要周期性执行的代码。
成员函数:wxTimer (wxEvtHandler *owner, int id=-1)用于创建一个计数器timer并将其链接到一个拥有者owner,id是这个计数器timer的标示符,用于事件宏EVT_TIMER中用于区分不同的timer。
使用时主要在所在类(这个类要求直接或者间接继承自wxEvtHandler)的构造函数(如ShapedFrame)添加(new)一个wxTimer的指针(如m_timer),然后调用成员函数Start (int milliseconds=-1, bool oneShot=false)启动计时x微秒的计数器。
三、代码节选:
//定义继承自基类wxFr

本文介绍了如何在wxWidgets的Frame上显示一个能够定时刷新的时钟。作者首先尝试了直接绘制文本的方法,但发现会被覆盖。于是采用先绘制矩形框,再在框内写入文本的方式,并通过wxTimer类定时触发OnTimer事件,实现了时钟的刷新。此外,文章还探讨了wxTimer的使用,包括其构造和Start方法。最后,作者提到了使用wxStaticText控件作为另一种显示时间的方法,可以更方便地更新文本。
最低0.47元/天 解锁文章
436

被折叠的 条评论
为什么被折叠?



