一个比较完整的wxWidget项目
将shell式的PC软件,改造成扁平的wxWidget软件
1. 分析shell
当你第一次分析一个比较长的shell程序时,肯定会头晕,找不着如何下手.我是看了将近两遍的.
第一次,整体看一遍,把不了解的命令查出来,标注释.
第二次,用笔记录逻辑分支,把整个大程序,按功能分解成小程序块.
2.理清设计思路
1.画UML,确定逻辑顺序. (这可能会在后期设计界面和写代码的时候,进行属性改动,没事,这是初手必经之路,不可能一次定型)
2.根据UML,和之前的功能分析,画出界面草图.
3.生成工程,开始设计实现界面.
根据界面进行编码实现
formbuilder (wxFormBuilder界面文件)
----------------gui.fbp(主界面)
----------------child1gui.fbp(子界面)
----------------child2gui.fbp
include(具体功能实现的.h文件)
-----------main.h(派生于gui.h)
-----------child1.h(i派生于child1gui.h)
-----------child2.h
-----------common.h(通用的方法头文件)
-----------otherfun.h(其它模块)
resources(界面相关的实现cpp和.h头文件)
----------------gui.cpp
----------------gui.h
----------------child1gui.cpp
----------------child1gui.h
----------------child2gui.cpp
----------------child2gui.h
src(具体功能实现的cpp文件)
------------main.cpp
------------child1.cpp
------------child2.cpp
------------common.cpp
------------otherfun.cpp
|
|
**备注:**界面设计和实现依赖于gui.h再派生.h的方法,具体是:在wxFormBuilder中,设计好界面,然后点击Tools | Generate InheritedClass(或F6)启动Generate Inherited Class(生成继承类向导)的办法在
wxFormBuilder中生成子类
代码开发中的总结
1.得到system里命令的返回值
//得到system里命令的返回值
string Common::getCmdResult(const string &strCmd)
{
char buf[10240] = {0};
FILE *pf = NULL;
if( (pf = popen(strCmd.c_str(), "r")) == NULL ) {
return "";
}
string strResult;
while(fgets(buf, sizeof buf, pf)) {
strResult += buf;
}
pclose(pf);
unsigned int iSize = strResult.size();
if(iSize > 0 && strResult[iSize - 1] == '\n') { // linux
strResult = strResult.substr(0, iSize - 1);
}
return strResult;
}
2.在指定文件里的查找指定字符串,找到返回true, flag ==1 表示区分大小写, 0表示不区分
//function: 在指定文件里的查找指定字符串,找到返回true, flag ==1 表示区分大小写, 0表示不区分
bool Common::findContent(const wxString file, const wxString findString, int flag)
{
wxString content;
wxFile content_file(file,wxFile::read);
wxFileOffset nSize = content_file.Length();
if (wxInvalidOffset == nSize) {
wxMessageBox(file + _T(" is null "), _T("Error"),
wxOK | wxICON_INFORMATION);
} else {
wxUint8 * data = new wxUint8[nSize];
if (content_file.Read(data, (size_t)nSize) != nSize) {
delete[] data;
}
for(int i=0; i<nSize; i++) {
content = content + data[i];
}
}
content_file.Close();
if(flag==1) {
if(content.Contains(findString)) {
return true;
} else {
return false;
}
} else {
if(content.Lower().Contains(findString.Lower())) {
return true;
} else {
return false;
}
}
}
3.多个控件共用一个事件函数
只需要在wxFormBuilder里,选择控件,然后在把控件的Events里,设置同样的事件函数名就行.
那么如何判断是哪个控件触发的事件呢?
这时就可能用event.id来判断了
4.wx写文件
假如有一个wxArrayString 数组, item
下面的程序,将item里的内容写进文件ll里
wxFile file(wxT("/home/xiale/wer/ll"),wxFile::write); //这种写文件的方式,直接重写,不会追加
if (file.IsOpened()) {
//wxString str= wxT("sdfsf");
//file.Write(str + wxTextFile::GetEOL());
for(int i =0; i <item.Count(); i++) {
file.Write(item[i] + wxTextFile::GetEOL());
}
file.Close();
}
186



被折叠的 条评论
为什么被折叠?



