wxWidgets应用程序:掌握参数解析技巧 - 实践

程序运行时的命令参数在程序启动前传入,用于动态修改程序配置,定义程序行为。命令参数是实用性程序的重要组成部分。wxWidgets在沿袭传统命令参数处理方式之外,采用对象化方式和工程化方式,提供了一个简洁高效的参数解析框架。

一、兼容C/C++

命令参数在程序启动前传入,用于动态修改程序配置,定义程序行为。与int main(int argc,char**argv)不同,wxWidgets程序不能从OnInit()函数中直接获取命令行参数。argc和argv参数存储在wxAppConsole的同名成员变量中,并在调用OnInit()之前完成初始化。您可以在wxApp子类中直接使用,也可以在wxApp类之外通过wxGetApp().argc或wxGetApp().argv访问。

bool MyApp::OnInit() {
	std::cout<<"OnInit()"<

编译并运行实例:

./myapp a1 a2 a3 a4

程序将输出:

wxWidgets将c语言main函数的int argc,char**argv存储在类成员变量中,这样就可以像以往一样处理程序运行时的输入参数了。

二、框架化参数

除了直接使用wxApp中的argc和argv参数来操作初始化参数外,wxWidgets还提供了更简便的wxCmdLineParser类(<wx/cmdline.h>),它可以自动区分选项、开关和参数,允许选项分组,同时使用短和长选项,能够根据命令描述内容自动生成用法消息,还可以自动检查选项值的类型。它具有一个专业的应用程序解析命令行参数所需的全部功能。

命令行参数分为三种类型:

开关:布尔选项,不带任何值。例如,“-v”可能是一个开关,意思是“启用详细模式”。

选项:与开关参数类似,但附有参数相关的值。例如,“-o filename”可能是指定输出文件名的选项。

参数:必需的程序参数。

应用程序wxAppwxAppConsole可以使用wxCmdLineEntryDesc数组描述程序支持的命令行参数,并通过wxCmdLineParser::SetDesc()传递给wxCmdLineParser对象并解析参数项

wxCmdLineEntryDesc数组定义示例如下:

static const wxCmdLineEntryDesc cmdLineDesc[] ={
    { wxCMD_LINE_SWITCH, "h", "help", "show this help message",
        wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
    { wxCMD_LINE_SWITCH, "d", "dummy", "a dummy switch",
        wxCMD_LINE_VAL_NONE, 0 },
    { wxCMD_LINE_SWITCH, "s", "secret", "a secret switch",
        wxCMD_LINE_VAL_NONE, wxCMD_LINE_HIDDEN },
    // ... your other command line options here...
    wxCMD_LINE_DESC_END
};

使用wxCommandParser的典型步骤为:1.构造wxCommandParser的对象;2.定义并调用SetDesc()设置命令行参数描述;3.设置用户命令行参数;4.调用Parse()解析用户命令行参数;5.使用Found()检索参数值。如下所示:

wxCmdLineParser parser;
parser.SetDesc(cmdLineDesc);
parser.SetCommnadLine(argc,argv);
//或 wxCmdLineParser parser(cmdLineDesc,argc,argv);
switch ( parser.Parse() ){
    case -1:
        //错误的参数格式,打印帮助信息
        break;
    case 0:
        //正确解析
        if (parser.Found("d")){
            wxPrintf("Dummy...\n");
        }
        if (parser.Found("s")){
            wxPrintf("Secret...\n");
        }
        break;
    default:
        break;
}

结构体wxCmdLineEntryDesc定义一个命令行参数的全部信息,包含:

1kind为枚举类型wxCmdLineEntryType,标识参数类型,其定义如下:

表 1wxCmdLineEntryType定义

wxCMD_LINE_SWITCH 

posted on 2026-01-02 17:17  ljbguanli  阅读(1)  评论(0)    收藏  举报