先编写如下命令行入口定义,内部的具体设定为什么意思,可以参考wxCmdLineParser类。
1 static const wxCmdLineEntryDesc g_cmdLineDesc [] =
2 {
3 { wxCMD_LINE_SWITCH, wxT("h"), wxT("help"), wxT("displays help on the command line parameters"),
4 wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
5 { wxCMD_LINE_SWITCH, wxT("t"), wxT("test"), wxT("test switch"),
6 wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_MANDATORY },
7 { wxCMD_LINE_SWITCH, wxT("s"), wxT("silent"), wxT("disables the GUI") },
8
9 { wxCMD_LINE_NONE }
10 };
11
然后重写
1 void cmdline_testApp::OnInitCmdLine(wxCmdLineParser& parser){
2 parser.SetDesc( g_cmdLineDesc );
3 parser.SetSwitchChars( wxT("-"));
4 }
然后,在MyApp::OnInit(){}内部调用 wxApp::OnInit(){}
而它,会递归调用到wxAppConsole::OnInit(){}来初始化和解析命令行参数。(wx2.8.7\src\common\appbase.cpp的line 173开始有具体的初始化命令行,解析命令行的实现。
使用如下的代码可以禁止命令行弹出信息窗口。
bool MyApp::OnInit(){
wxMessageOutput * old_output_log = wxMessageOutput::Set( new wxMessageOutputLog);
if(!wxApp::OnInit()){
//parse error
delete wxMessageOutput::Set( old_output_log );
return false;
}
else{
delete wxMessageOutput::Set( old_output_log );
}
MainFrame * w = new MainFrame( wxT("Hello"));
w.Show();
return true;
测试可以看到没有出现“命令行解析错误”的信息窗口。