場(chǎng)景:
1.wxWidgets是一個(gè)優(yōu)秀的界面庫,它的xrc界面布局格式也是很優(yōu)秀的,可以使用類似mfc的所見即所得的設(shè)計(jì)方式,我發(fā)現(xiàn)它和xcode的interface builder的理念如出一轍。
都是界面與業(yè)務(wù)分離,界面與業(yè)務(wù)動(dòng)態(tài)綁定。
2.快速開發(fā)小軟件時(shí),使用wxFormBuilder來設(shè)計(jì)好界面,生成XRC文件,當(dāng)然不想給別人看到xrc文件的內(nèi)容也可以用工具編譯為二進(jìn)制文件,參考wx.chm文檔吧。之后程序載入界面再綁定行為很優(yōu)雅和高效。wxFormBuilder設(shè)計(jì)好之后按f5直接看運(yùn)行效果很贊。
3.博客導(dǎo)出下載工具 就是用wxFormBuilder來設(shè)計(jì)界面的,xrc文件本身不應(yīng)該手動(dòng)編輯,因?yàn)樗慕Y(jié)構(gòu)化信息比較多,用軟件代為生成就最適合不過了。
文件1: wxFormBuilder生成的xrc文件另存為blog.xrc:
文件2:main.cpp調(diào)用載入xrc和綁定事件,以下調(diào)用python部分可以刪除,無關(guān)。
- bool MyApp::OnInit()
- {
- if (!wxApp::OnInit())
- {
- return false;
- }
- Py_Initialize();
- PyObject* obj = Py_InitModule("redirection", RedirectionMethods);
- assert(obj);
- PyRun_SimpleString("\
- import redirection\n\
- import sys\n\
- class StdoutCatcher:\n\
- def write(self, stuff):\n\
- redirection.stdoutredirect(stuff)\n\
- sys.stdout = StdoutCatcher()");
-
- wxInitAllImageHandlers();
- wxXmlResource::Get()->InitAllHandlers();
-
- //載入U(xiǎn)i目錄下的所有xrc文件
- wxString ui_dir = GetAppRunDirectory()+wxT("/Ui");
- wxXmlResource::Get()->LoadAllFiles(ui_dir);
-
- MyFrame *frame = new MyFrame(NULL);
- bool loaded = wxXmlResource::Get()->LoadFrame(frame, NULL, "MyFrame1");
- assert(loaded);
- frame->Init();
- frame->Show(true);
- return true;
- }
-
- //1.創(chuàng)建MyFrame之后動(dòng)態(tài)綁定事件
- void MyFrame::Init()
- {
- backup_button_ = XRCCTRL(*this, "m_button1", wxButton);
- backup_button_->Bind(wxEVT_COMMAND_BUTTON_CLICKED,
- wxCommandEventHandler(MyFrame::OnBackup), this, XRCID("m_button1"));
- XRCCTRL(*this, "m_button2", wxButton)->Bind(wxEVT_COMMAND_BUTTON_CLICKED,
- wxCommandEventHandler(MyFrame::OnBrowse), this, XRCID("m_button2"));
-
- pText_ = XRCCTRL(*this, "m_textCtrl2", wxTextCtrl);
-
- url_ = XRCCTRL(*this, "m_textCtrl1", wxTextCtrl);
- output_ = XRCCTRL(*this, "m_textCtrl6", wxTextCtrl);
-
- Connect(wxXmlResource::GetXRCID(wxT("kMenuFeedback")), wxEVT_COMMAND_MENU_SELECTED,
- wxCommandEventHandler( MyFrame::OnFeedback ) );
- Connect(wxXmlResource::GetXRCID(wxT("wxID_EXIT")), wxEVT_COMMAND_MENU_SELECTED,
- wxCommandEventHandler( MyFrame::OnExit ) );
-
- wxIcon icon;
- icon.LoadFile(wxT("blog.ico"),wxBITMAP_TYPE_ICO ,32,32);
- SetIcon(icon);
-
- gFrame = this;
- }
注意:載入xrc后,wx會(huì)自動(dòng)生成一個(gè)控件對(duì)應(yīng)的id,這時(shí)候用wxXmlResource::GetXRCID(wxT("kMenuFeedback"))通過name來獲取id即可。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。