使用xrc分离界面与代码
2007-09-10 19:17
302 查看
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("保存成功");
}
}
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("保存成功");
}
}
相关文章推荐
- wxWidgets:使用xrc文件分离界面与代码
- wxWidgets:使用xrc文件分离界面与代码
- (转)flex中使用swc实现更好的界面代码分离
- flex中使用swc实现更好的界面代码分离
- flex中使用swc实现更好的界面代码分离
- 界面代码使用总结
- 使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
- ios视频播放器,代码和界面分离
- 使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- python使用pyqt写带界面工具的示例代码
- iOS开发UI篇—以微博界面为例使用纯代码自定义cell程序编码全过程(一)
- 使用纯代码的界面程序
- ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
- 12-界面控件之listView使用java代码和xml文件不同方式实现列表显示
- 使用自定义标签实现JSP页面和代码的分离
- IOS开发之纯代码界面--基本控件使用篇 ┊
- 样式代码与界面代码分离:NoahWeb
- iOS 8 Auto Layout界面自动布局系列3-使用代码添加布局约束
- 使用代码分离构建自定义组件
- IOS开发之纯代码界面--基本控件使用篇 Demos