wxWidgets中wxTimer处理图片切换的问题总结

来源:互联网 发布:中国网络世界好先进 编辑:程序博客网 时间:2024/05/22 00:40

         最近一段时间很忙,上个月回学校参加毕业论文答辩,享受完最后一周的大学时光。一回到公司就开始忙乎了,现在利用周末的时间发表自己的第一篇博客,使用wxTimer来处理图片切换的问题。

wxTimer类主要是在某个特定的时间间隔收到提醒,在每隔几毫秒处理一次,以便你的应用程序可以有足够的时间响应用户的输入,可以使用wxTimer来替换多线程。

   涉及因素:

1.时间间隔:使用wxTimer来设置你所需要的时间间隔,如wxTimer m_timer; m_timer.Start(1000).

   2.图片处理:图片的加载,图片的绘制和重绘

3.事件处理:使用EVT_TIMER(id,func)事件映射宏将事件映射到对应的处理函数

注意:在使用wxTimer的时候,在main_fame构造函数内尽量少用,因为如果一开始时间轴就开始Start(),可能处理函数还没执行完时间轴就已经执行一次了,结果会导致程序崩溃。

代码如下:

main_frame: public wxFrame
{
public:
...
void OnTimer(wxTimerEvent& event);
void OnClick(wxCommandEvent& event);
wxTimer m_timer;
wxVector<wxBitmap> vector;
wxVector<wxBitmap>::const_iterator i;
wxBitmap bitmap_;
...
private:
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(main_frame,wxFrame)
EVT_TIMER(wxID_TIMER,main_frame::OnTimer)
EVT_MENU(wxID_CLICK, main_frame::OnClick)
END_EVENT_TABLE()
main_frame::main_frame():wxFrame(NULL,wxID_ANY,wxT("wxClient sample!!"),wxDefaultPosition,wxDefaultSize,wxDEFAULT_FRAME_STYLE,wxT("")),
m_timer(this,TIMER_ID)
{
wxMenu *fileMenu = new wxMenu;
fileMenu->Append(wxID_CLICK, wxT("&Click...\tF4"),wxT("Click the application."));
wxMenuBar *menuBar = new wxMenuBar();
menuBar->Append(fileMenu, wxT("&File"));
SetMenuBar(menuBar);
//图片的加载
bitmap_ = wxBitmap(wxT("C:\\Users\\Administrator\\Desktop\\picture\\1.bmp"),wxBitmap_TYPE_BMP);
...
vector.push_back(bitmap_);//图片插入到容器中去
i=vector.begin();
}
//时间轴触发并开始
void main_frame::OnClick(wxCommandEvent& event)
{
m_timer.Start(1000); //1s
}
//时间轴内图片的处理
void main_frame::OnTimer(wxTimerEvent &event)
{
cout << "OnTimer" << endl;
wxClientDC dc(this);
dc.Clear();  //图片切换涉及到图片的重绘,主要是清除前一种图片
dc.DrawBitmap(*i,0,0,true);
i++;
if(i==vector.end())
{
i=vector.begin();
}
}

0 0
原创粉丝点击