天天看点

wxWidgets开发------前言

       不知不觉,自己已经出来走出校门工作近三年了。想不到在现在这家公司竟呆了2个年头了,说来也不容易,自己是嵌入式C软件出身,继而在人称“互联网寒冬”转入互联网行业。当初凭借着自学的那点Qt找到这家公司,跟着前辈用Qt开发交易前端,此时已接近项目上线时间了。此项目极其不稳定。上线后经常闪退,可以说这次项目是失败的。随即领导召集开会准备重构,找来wxWidgets框架,自此打响了重构的吹风号。。。。。但是,事情并没有这么简单,先前前辈一人以耗费996的时间独挑项目已然疲惫不堪,提出了离职申请,尽管领导再三让他留下,还是未能留下他。革命尚未成功,岂是这点困难就能阻挡的??后来领导决定亲自挂帅,我就跟着领导开始995的wxWidgets开发生活。

————————此时的我,已经将wxWidgets框架基本学完。后面,我准备陆续分享关于wxWidgets的开发实战经验。

一个前端框架,总的来说,就是三点 1、事件机制 2、线程 3、框架库

1、事件机制:                                                                                                                                                                                                                                                                                                                                                                                                                    wxWidgets采用跟MFC相同的消息映射方式,分为静态绑定 跟动态绑定,自2.8.0版本之后推荐使用动态绑定(Bind跟 Unbind)                                                                                                                                                                                                                       Bind(const EventTag &eventType,void (Class::*method)(EventArg &),EventHandler *handler, int winid = wxID_ANY, int lastId = wxID_ANY,wxObject *userData = NULL)  第一个参数为事件类型:比如按钮事件wxEVT_BUTTON,鼠标事件wxEVT_MOUSE第二个参数设置回调函数,或者说消息执行函数,第三个参数为相当于窗口句柄,其含义可理解为现在bind是当前界面的事件 第四个参数为当前界面的id 此参数可自定义,第五,第六没用过。目前都没用到。                                                                                                           bool Unbind(const EventTag &eventType,void (Class::*method)(EventArg&),EventHandler *handler, int winid = wxID_ANY,int lastId = wxID_ANY,wxObject *userData = NULL ) 相反过程 bind unbind基本需要成对出现 可以在构造跟 析构中对应出现                               那如何自定义事件呢??? 这里先介绍一种异步方式的事件发送

wxCommandEvent event(wxEVT_COMMAND_RIGHT_CLICK, EVENT_ID_MOUSE_RIGHTUP);

event.SetInt(2);

wxQueueEvent(this->GetParent(), event.Clone());

wxCommandEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)  参数一:事件类型 ,参数二:界面窗口id 这个可以自定义 ;第二行就是自定义事件可以传哪些参数了。对应自己想要传的数据都行。                                                                           inline void wxQueueEvent(wxEvtHandler *dest, wxEvent *event) 此函数就是一个异步的过程,参数一表示 此事件要发送到哪里。wxWidgets的界面都是从wxEvtHandler 继承下来的,所以就是获取事件句柄就好了。参数二:将此自定义事件创建出来即event.Clone()

2、线程                                                                                                                                                                                                                                                                                                                                                                                                                             wxWidgets中的线程是wxThread,分为两种 一种是分离式线程 一种是联合线程具体后面单独写一篇关于wxWidgets线程开发

3、框架库                                                                                                                                                                                                                                                                                                                                                                                                                     这个就只能靠开发慢慢熟悉wxWidgets自带的控件,接口方法了。