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

多多的爹

 
 
 

日志

 
 

MFC到wxWidgets移植笔记(2)——移植CDoubleEdit  

2008-01-29 16:24:36|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

移植从最简单、最小的模块开始,MyMoney中有几个控件类比较独立,首先移植他们。

CDoubleEdit是一个只能输入double的文本控件,其小数位置最多允许两位,在MyMoney中提供金钱输入的功能。

在MFC中,CDoubleEdit从CEdit派生,为响应消息EN_CHANGE,实现了消息函数OnEnChange,当文本控件内容发生改变后,判断是否是合法值,如果不是则恢复成旧值m_content。以下是CDoubleEdit在MFC中的声明:

class CDoubleEdit : public CEdit
{
public:
    CDoubleEdit();
    virtual ~CDoubleEdit();

protected:
    DECLARE_MESSAGE_MAP()

public:
    afx_msg void OnEnChange();

private:
    std::wstring    m_content;
};

wxWidgets提供了一个wxTextCtrl类,这个类相当于CEdit,同样wxWidgets也有消息映射机制,实现了消息函数OnText,响应消息wxEVT_COMMAND_TEXT_UPDATE。以下是CDoubleEdit在wxWidgets中的声明:

class CDoubleEdit : public wxTextCtrl
{
public:
    CDoubleEdit(wxWindow *parent,
        wxWindowID id = wxID_ANY,
        const wxString& value = wxT("0"),
        const wxPoint& pos = wxDefaultPosition,
        const wxSize& size = wxDefaultSize);
    virtual ~CDoubleEdit();

public:
    void OnText(wxCommandEvent& event);

private:
    wxString    m_content;
    DECLARE_EVENT_TABLE()
};

我不喜欢用MFC的CString,所以以前的代码用std::wstring比较多,虽然这种类型也可以跨平台,但wxString似乎更好用一点,因此移植后将所有的std::wstring改成了wxString。

wxWidgets的宏wxT可以根据工程字符集来转换字符串。

wxPoint和wxSize类似于MFC中的CPoint和CSize。

MFC用DECLARE_MESSAGE_MAP()声明消息映射表,wxWidgets中为DECLARE_EVENT_TABLE()。

 

再改cpp文件。将MFC中

BEGIN_MESSAGE_MAP(CDoubleEdit, CEdit)
    ON_CONTROL_REFLECT(EN_CHANGE, OnEnChange)
END_MESSAGE_MAP()

换成适合wxWidgets的

BEGIN_EVENT_TABLE(CDoubleEdit, wxTextCtrl)
    EVT_TEXT(wxID_ANY, CDoubleEdit::OnText)
END_EVENT_TABLE()

其它的工作,就是替换部分成员函数的体力活了。

GetWindowText GetValue
SetWindowText SetValue
SetSel SetSelection
GetSafeHwnd GetHandle

另外提一笔wxString,很好用,比如他提供了Format函数:

double d = 5.6f;

m_content = wxString::Format(L"%.2f", d);

和类型转换函数:

double d;

m_content.ToDouble(&d);

  评论这张
 
阅读(25)| 评论(1)
推荐 转载

历史上的今天

评论

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

页脚

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