注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

多多的爹

 
 
 

日志

 
 

MFC到wxWidgets移植笔记(4)——前两篇移植笔记的补充  

2008-05-09 10:30:10|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

年前写的移植笔记,就突然中断了,没有别的原因,因为当时就发现走了很多弯路,代码改了又改,最后一直到真正的移植到Ubuntu,编译通过,是几个月后的事情了。因为把这些东西都弄清楚了,才开始继续这个笔记,其中又学到了不少的东西。当初的想法果然是对的,只有找个小小的项目练练手,才可能学到不少好东西。
回头看看前三篇笔记,第一篇没必要修改,第2、3篇的内容发生了不少改变,其实主要是重构,以前的路子还是正确的。
第二篇中的CDoubleEdit,类名称做了修改。首先是去掉了前面的C。类命名时在前面加C,是传统的匈牙利命名法,这种方法没什么问题,但是好像Linux下的代码不买这个帐,因此我也去掉了。顺带的,后面所有的类,都去掉了以C开头的命名方式。其次以Double为名,没有反映出表示钱的意思,因此将类名改成了MoneyTextCtrl。TextCtrl是为了符合wxWidgets的命名标准。
第三篇中的CDailyButton,同样换了一个名字,新名字为DailyPanel。Ubuntu下面,没有自绘的Button一说,因此新的DailyPanel直接从wxWindow派生,然后实现wxWindow的EVT_PAINT消息,同样实现了自绘功能。当然,因为不再是Button,此时需要自己实现一些Button的功能了,在EVENT_TABLE中,增加几个消息响应。主要是当DailyButton获得和失去焦点,或者按键、鼠标点击的时候,触发他的刷新消息就行了:
BEGIN_EVENT_TABLE(DailyPanel, wxWindow)
    EVT_PAINT(DailyPanel::OnPaint)
    EVT_ERASE_BACKGROUND(DailyPanel::OnErase)
    EVT_SET_FOCUS(DailyPanel::OnSetFocus)
    EVT_KILL_FOCUS(DailyPanel::OnKillFocus)
    EVT_CHAR(DailyPanel::OnChar)
    EVT_MOUSE_EVENTS(DailyPanel::OnMouseEvent)
END_EVENT_TABLE()
另外,在有RETURN和SPACE按键或者鼠标点击时,需要向上级窗口发送一个wxEVT_COMMAND_BUTTON_CLICKED消息,模拟Button消息:
void DailyPanel::OnChar(wxKeyEvent& event)
{
    if (WXK_RETURN == event.GetKeyCode()
        || WXK_SPACE == event.GetKeyCode())
    {
        wxCommandEvent et;
        et.SetEventType(wxEVT_COMMAND_BUTTON_CLICKED);
        et.SetId(GetId());
        GetParent()->GetEventHandler()->ProcessEvent(et);
    }
}
这样的实现,可保证DailyPanel的平台移植性了。

  评论这张
 
阅读(11)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017