wxwidgets有像MFC那样的时间事件吗? Topic is solved

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
happybamboo
Knows some wx things
Knows some wx things
Posts: 27
Joined: Tue Sep 16, 2008 4:19 am

wxwidgets有像MFC那样的时间事件吗?

Post by happybamboo »

我想写一个和时间相关的东西,比如说一秒钟数字变一次,我记的MFC有一个TIMER啥的东西可以发送时间事件,wxwidgets有吗?没有的话怎么做到一秒钟刷新一次界面啊?
请高手指教一下,先谢啦。
samsam598
Super wx Problem Solver
Super wx Problem Solver
Posts: 340
Joined: Mon Oct 06, 2008 12:55 pm

Post by samsam598 »

俺不是高手,俺是菜鸟

使用wxTimer

wxTimer类让你的程序可以周期性的收到提示,或者在某个特定的时间间隔收到提醒.如果你要使用线程处理的事情可以分成小的时间片,每隔几个毫秒处理一次,以便你的应用程序可以有足够的时间响应用户的输入,你就可以使用wxTimer来代替多线程.

你可以自己选择提醒的通知方式,如果你更喜欢使用虚函数,就实现一个wxTimer的派生类,然后重载其Notify函数,如果你更倾向使用事件机制,就给你的wxTimer构造函数指定一个wxEvtHandler指针(或者使用SetOwner)函数,然后使用EVT_TIMER(id, func)事件映射宏来将事件映射到对应的处理函数.

你可以给wxTimer的构造函数或者SetOwner函数传递一个可选的定时器标识符,这个标识符可以用在EVT_TIMER事件映射宏中.这在你需要使用多个定时器的时候比较有用.

使用Start函数启动定时器,需要传递的参数包括一个毫秒为单位的定时器时长和可选的wxTIMER_ONE_SHOT指示(如果你只希望收到一次提示).Stop函数用来终止某个定时器,IsRunning函数用来检测当前定时器是否出于运行状态.

下面的代码演示了怎样通过事件的方式使用定时器:


#define TIMER_ID 1000
class MyFrame : public wxFrame
{
public:
...
void OnTimer(wxTimerEvent& event);
private:
wxTimer m_timer;
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_TIMER(TIMER_ID, MyFrame::OnTimer)
END_EVENT_TABLE()
MyFrame::MyFrame()
: m_timer(this, TIMER_ID)
{
// 1秒的间隔
m_timer.Start(1000);
}
void MyFrame::OnTimer(wxTimerEvent& event)
{
// 你可以在这里作任何你希望1秒执行一次的动作
}

另外你可以看一下这个教程,用WX写的贪吃蛇,主要事件用wxTimer来驱动.
http://code.technoplaza.net/wxNibbles/
Last edited by samsam598 on Tue Aug 04, 2009 8:40 am, edited 2 times in total.
ollydbg23
Super wx Problem Solver
Super wx Problem Solver
Posts: 438
Joined: Fri Dec 12, 2008 10:31 am

Post by ollydbg23 »

上面这个教程不错啊!谢谢!
happybamboo
Knows some wx things
Knows some wx things
Posts: 27
Joined: Tue Sep 16, 2008 4:19 am

Post by happybamboo »

谢了,呵呵
arust
Knows some wx things
Knows some wx things
Posts: 34
Joined: Tue Jan 15, 2008 5:13 am
Location: Beijing, China

Post by arust »

samsam598的回复很精彩 :D
Post Reply