terça-feira, 30 de agosto de 2011

wxWidgets – Usando argc e argv em wxApp

Continuando com o tutorial básico de wxWidgets, hoje vou explicar como utilizar argc e argv de wxApp.

São valores que são passados na inicialização de programas, onde argc me retorna o número de argumentos passados e argv os valores dos argumentos.

Utilizando o mesmo código anterior de wxApp, vamos ver como funciona:

Vou criar um novo projeto, onde o executável está em /home/alex/Documentos/wxapp_tuto/tuto_wxapp/bin/Debug

Vamos ao código:

//main.h
#include <wx/wx.h>

class wxAppTuto: public wxApp
{
    public:
        bool OnInit(void);
};

//main.cpp
#include “main.h”
bool wxAppTuto::OnInit()
{
    //Aqui eu pego o valor de argc e argv...
    //Lembre-se que eles são membros de wxApp
    int get_argc = argc;
    wxString get_argv = *argv;

    //Aqui mostro estes valores em um wxMessageBox
    wxMessageBox(wxString::Format(wxT("Números de parâmetros - %d \n\n Valores - "), get_argc) + get_argv);
    return false;
}

IMPLEMENT_APP(wxAppTuto)

O resultado da execução do programa será o seguinte:


Vejam que mesmo eu não tendo passado nenhum valor na inicialização ele me retornou um valor, que é o caminho completo para o executável, este valor sempre será apresentado no primeiro valor...

Agora vamos alterar um pouco o código para pegarmos todos os argumentos que possam ser passados:

//main.cpp
#include “main.h”
bool wxAppTuto::OnInit()
{
    int get_argc = argc;

    wxString get_argv;

    //Aqui eu pego o número de argumentos e vou adicionando
    //cada um deles a wxString get_argv...
    for(int i = 0; i < argc; i++)
    {
        get_argv += wxString::Format(wxT("%s\n"), argv[i]);
    }

    wxMessageBox(wxString::Format(wxT("Números de parâmetros - %d \n\n Valores - "), get_argc) + get_argv);
    return false;
}

Agora vou reabrir o programa pela linha de comando da seguinte maneira.

//tuto_wxapp é o nome do executável...
./tuto_wxapp teste1 teste2 teste3

O resultado será o seguinte:


Veja que ele pegou cada um dos valores em um argumento, se fossemos passar uma string com espaços precisaríamos apenas passar este valor entre aspas como em “teste tutorial wxApp”.

./tuto_wxapp “teste tutorial wxApp”


Uma aplicação prática, seria quando abrimos um arquivo usando o “Abrir com...” diretamente pelo nosso programa, quando fazemos isto, o caminho para este arquivo é passado no argumento, se tentarmos abrir vários arquivos de uma vez serão passados vários argumentos, pegaríamos cada um deles e passaríamos para o sistema, isto é útil se tivermos criando um programa para exibir imagens ou um editor de textos por exemplo.

Espero que aproveitem a explicação e até a próxima.

0 comentários:

Postar um comentário