使用xrc分离界面与代码

 wxwidgets支持一种叫xrc的文件,我们可以将字符串,控件,界面布局,图形,放到xrc文件中,程序运行以后再调用这些文件。这就可以在不修改程序的情况下,修改界面,字符串,以及程序中用到的图形,甚至实现i18n(国际化)。

TextFrame.xrc


<?xml version="1.0" encoding="UTF-8"?>

<resource version="2.3.0.1" xmlns="http://www.wxwidgets.org/wxxrc">
<object class="wxFrame" name="main_frame">
    <title>TextDemo</title>
    <object class="wxMenuBar" name="main_menu">
        <object class="wxMenu" name="file_menu">
            <label>_File</label>
            <object class="wxMenuItem" name="save_menuitem">
                <label>_Save</label>
            </object>
        </object>
    </object>
    <object class="wxTextCtrl" name="tc">
        <style>wxTE_MULTILINE</style>
    </object>
</object>
</resource>




wxTextApp.h


#ifndef TEXTFRAME_H_
#define TEXTFRAME_H_

class TextFrame : public wxFrame
{
public:
    TextFrame(wxWindow* parent);
    virtual ~TextFrame();
   
    void OnSave(wxCommandEvent& event);
public:

   
   
private:
    DECLARE_EVENT_TABLE()
};

#endif /*TEXTFRAME_H_*/




TextApp.cpp



#include "wx/wx_gch.h"

#include "TextApp.h"
#include "TextFrame.h"

IMPLEMENT_APP(TextApp)


bool TextApp::OnInit()
{
    //初始化xrc处理器
    wxXmlResource::Get()->InitAllHandlers();
    //载入xrc文件
    if (!wxXmlResource::Get()->Load(_T("rc/TextFrame.xrc")))
        return false;
   
    TextFrame* frame = new TextFrame((wxWindow*)NULL);
    frame->Show(true);
    return true;
}





TextFrame.h


#ifndef TEXTFRAME_H_
#define TEXTFRAME_H_

class TextFrame : public wxFrame
{
public:
    TextFrame(wxWindow* parent);
    virtual ~TextFrame();
   
    void OnSave(wxCommandEvent& event);
public:

   
   
private:
    DECLARE_EVENT_TABLE()
};

#endif /*TEXTFRAME_H_*/



TextFrame.cpp


#include "wx/wx_gch.h"

#include "TextFrame.h"
#include "wx/filedlg.h"



BEGIN_EVENT_TABLE(TextFrame,wxFrame)
    EVT_MENU(XRCID("save_menuitem"),TextFrame::OnSave)
END_EVENT_TABLE()

//wxMemoryDC dc;    //必须构造wxMemoryDC对象以保证能够调试

TextFrame::TextFrame(wxWindow* parent)
{
    //从xrc资源当中初始化本窗口
    wxXmlResource::Get()->LoadFrame(this,parent,_T("main_frame"));
}

TextFrame::~TextFrame()
{
}

void TextFrame::OnSave(wxCommandEvent& event)
{                             
    wxFileDialog fd( this,
                    _T("保存文件"),
                    _T("."),
                    _T(""),
                    _T("txt file(*.txt)|*.txt|all file(*.*)|*.*"),
                    wxSAVE,
                    wxDefaultPosition);
    if (fd.ShowModal() == wxID_OK)
    {
        //从xrc资源中找到控件
        wxTextCtrl* tc = XRCCTRL(*this,"tc",wxTextCtrl);
        tc->SaveFile(fd.GetFilename());
        wxMessageBox("保存成功");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值