Como usar a função OnInit() da classe wxApp do wxWidgets para definir o código de inicialização das suas aplicações
Você está aqui: wxWidgets ::: Dicas & Truques ::: wxApp
Quantidade de visualizações: 48 vezes
A função OnInit() da classe wxApp do wxWidgets é chamada quando o framework estiver pronto para executar o nosso código, a saber: exibir uma tela de login, carregar a janela principal, fazer conexão com um banco de dados, carregar configurações a partir de um arquivo, etc.
Esta função é equivalente à função main() em código C/C++ ou WinMain(), para o caso de aplicações Win32.
Veja um trecho de código no qual criamos uma aplicação wxWidgets e usamos a função herdada de wxApp para criar e exibir uma janela wxFrame, que será a janela principal da aplicação. Estude este código com atenção, pois ele é a fundação para qualquer tipo de aplicação wxWidgets que você desenvolverá mais adiante.
#include "janelaprincipal.h"
// vamos declarar a classe da aplicação  Declare the application class
// que herda de wxApp
class MinhaAplicacao : public wxApp
// o método OnInit() é chamado na inicialização da aplicação
// declara MinhaAplicacao& GetApp()
DECLARE_APP(MinhaAplicacao)
// implementação dos métodos da classe MinhaAplicacao
// aqui o wxWidgets cria nosso objeto MinhaAplicacao e o associa
// com a função de entrada main() ou WinMain()
IMPLEMENT_APP(MinhaAplicacao)
bool MinhaAplicacao::OnInit()
// cria a janela principal da aplicação
JanelaPrincipal *jp = new JanelaPrincipal(wxT("Cadastro"),
50, 50, 500, 400);
// mostra a janela principal
jp->Show(true);
// e inicia o loop de eventos
É claro que, para que o código C++ fique completo, precisamos também do arquivo de definição e implementação da janela principal. Veja os códigos abaixo:
Código para janelaprincipal.h:
#ifndef _JANELAPRINCIPAL_H
#define _JANELAPRINCIPAL
// Definição da nossa janela wxFrame
class JanelaPrincipal : public wxFrame{
// construtor não vazio
JanelaPrincipal(const wxChar *titulo, int posX, int posY,
int largura, int altura);
~JanelaPrincipal();
#endif // _JANELAPRINCIPAL_H
Código para janelaprincipal.cpp:
// arquivo de implementação
JanelaPrincipal::JanelaPrincipal(const wxChar *titulo, int posX,
int posY, int largura, int altura) : wxFrame((wxFrame *)NULL, -1,
titulo, wxPoint(posX, posY), wxSize(largura, altura)){
// não vamos fazer nada aqui por enquanto
JanelaPrincipal::~JanelaPrincipal(){
// por enquanto vamos deixar o construtor vazio
wxWidgets ::: Dicas de Estudo e Anotações ::: Passos Iniciais
Como baixar, compilar a biblioteca e criar um projeto C++ wxWidgets usando o Visual Studio 2017
Quantidade de visualizações: 887 vezes
O wxWidgets (conhecido anteriormente como wxWindows) é um toolkit para a criação de interfaces gráficas de usuário (UI) multiplataforma. É lançado sob uma licença livre, a wxWindows Library Licence.
Lançada em 1992 por Julian Smart, que continua como desenvolvedor, a biblioteca wxWidgets permite que um programa seja compilado e executado em diversas plataformas de computação, com poucas ou nenhuma modificação. Ela suporta sistemas como: Microsoft Windows, Apple Inc. Mac OS, Linux/Unix (para X11).
Fazendo o dowload do código fonte do wxWidgets
Agora que você já sabe o que é o wxWidgets, chegou a hora da notícia triste. Compilar e usar esta biblioteca em nossos programas C++ é um pesadelo, principalmente no Windows. Por isso, resolvi compartilhar com todos as minha experiência, já que o entendimento de todos os passos envolvidos me consumiu alguns finais de semana.
O primeiro passo é baixar o código fonte (source code) do wxWidgets. Para isso aponte o seu navegador para https://www.wxwidgets.org. Para esta dica eu usei a versão 3.1.3 no Visual Studio 2017. Acredito que outras versões, tanto do wxWidgets quanto do Visual Studio C++ tenham procedimentos parecidos.
Vá até a área de downloads e localize o instalador Windows Installer 1.3.1, com o tamanho de 53Mb. Lembre-se que estamos baixando o código fonte da biblioteca, e não os binários já prontos.
Finalizado o download, faça a instalação em um diretório sem espaços. Uma boa sugestão é "C:\wxWidgets-3.1.3"
Compilando o wxWidgets usando o Visual Studio 2017
Chegou a hora da compilação. Se você ainda não o fez, abra o VS 2017, vá no menu Abrir -> Pasta/Solução e navegue até o diretório C:\wxWidgets-3.1.3\build\msw. Neste diretório você encontrará projetos para as mais diferentes versões do Visual Studio. Como estamos usando o VS 2017, o projeto a ser aberto é wx_vc15.sln. Escolhe logo este arquivo e clique Abrir.
Para o processo de compilação nós temos quatro opções: Debug (static), DLL Debug, DLL Release e Release (static). O Debug deixa o executável maior, porque inclui verificações de faixas e outras informações importantes para o desenvolvimento. As versões com DLL são escolhas boas, pois deixa o executável menor e agiliza o processo de compilação. O alvo da CPU pode ser Win32 ou x64, dependendo do seu desejo. Para esta dica eu usei Win32.
Agora vamos compilar para estas quatro opções. Escolha a primeira (Debug), defina a CPU alvo e use a opção Compilar Solução. Pode ir buscar um cafezinho porque o processo é um pouco demorado. Faça isso com as outras três opções de compilação.
Correu tudo bem? Nada de erros? Vamos continuar então.
Criando o seu primeiro projeto wxWidgets para testar sua compilação
Em geral, quando terminamos de compilar o wxWidgets, a primeira coisa que fazemos é abrir uma das samples (amostras) que acompanham a biblioteca, tais como a "minimal", no diretório "C:\wxWidgets-3.1.3\samples\minimal". Se você fizer isso agora, verá que esta aplicação (minimal_vc15.sln) é compilada e executada com sucesso. O problema é quando queremos construir nossa aplicação a partir deste template. O simples fato de renomearmos o projeto ou movê-lo desse diretório já trará uma dor de cabeça danada.
Então vamos criar nosso próprio projeto. Feche e abra o VS 2017 novamente. Em seguida vá até o menu Arquivo -> Novo -> Projeto -> Projeto Vazio. Dê um nome e um local para este projeto, sempre sem espaços e caracteres especiais.
No Gerenciador de Soluções, clique com o botão auxiliar no nó Arquivos de Origem (Source Code) e escolha Adicionar -> Novo Item. Na janela que se abrirá, escolha Arquivo do C++ (.cpp), dê o nome "Main.cpp" e clique Adicionar.
Agora copie o código abaixo (retirado do manual do wxWidgets) e cole no arquivo Main.cpp:
Assim que você colar esse código, você já verá um monte de erros, várias partes do código sublinhadas de vermelho. Não se desespere que nós vamos corrigir isso agora.
Clique com o botão direito no nó do seu projeto e escolha a opção Propriedades. Nessa janela, localize a opção Configuração e selecione Todas as configurações. Plataforma fica à sua escolha, Win32 (x86) ou x64. Na dúvida deixe Win32.
Agora vá em C/C++, na aba Geral e localize Diretórios de Inclusão Adicionais. Clique e escolha a opção Editar. Adicione uma nova entrada para o diretório "C:\wxWidgets-3.1.3\include" (sem as aspas). Clique a opção Aplicar. Agora, ainda na opção C/C++, escolha Pré-processador, clique Editar e vamos acrescentar o valor WXUSINGDLL. Clique Aplicar novamente e vamos agora até o Veiculador (Linker). Localize Diretórios de Bibliotecas Adicionais e adicione a entrada "C:\wxWidgets-3.1.3\lib\vc_dll". Clique Aplicar.
Agora mude a configuração para Release. Em seguida vá na seção C/C++, localize a opção Diretórios de Inclusão Adicionais e acrescente a entrada "C:\wxWidgets-3.1.3\lib\vc_dll\mswu" (sem aspas). Vá agora no Veiculador (Linker), opção Entrada e informe o valores wxbase31u.lib e wxmsw31u_core.lib para Dependências Adicionais, cada um em uma linha.
Vamos repetir a mesma coisa para a configuração Debug. Dessa vez os valores para Dependências Adicionais na opção Entrada do Veiculador serão wxbase31ud.lib e wxmsw31ud_core.lib (cada um em uma linha). Para finalizar, vá em C/C++ e adicione "C:\wxWidgets-3.1.3\lib\vc_dll\mswud" como uma nova entrada para Diretórios de Inclusão Adicionais.
Se você seguiu todos os passos atentamente, já está pronto para compilar seu projeto. Dispare a opção Compilar e cruze os dedos. É bem provável que você já veja de cara o erro abaixo:
Erro LNK2019 símbolo externo indefinido _main referenciado na função "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) estudos C:\estudos_wxwidgets\estudos\estudos\estudos\MSVCRTD.lib(exe_main.obj)	1
Se isso acontecer, vá de novo até as propriedades do projeto, selecione Todas as Configurações, localize a opção Veiculador (Linker) e depois Sistema. Em SubSystem, troque o valor Console (/SUBSYSTEM:CONSOLE) por Windows (/SUBSYSTEM:WINDOWS). Tente compilar novamente.
É provável que você encontre mais um erro, e esperamos que será o último.
O programa não pode ser iniciado porque está faltando wxmsw313u_core_vc_custom.dll no seu computador. Tente reinstalá-lo para resolver esse problema.
Isso aconteceu porque você deve estar compilando em Debug DLL ou Release DLL (o que não é uma má idéia). Para resolver, vá até "C:\wxWidgets-3.1.3\lib\vc_dll" e copie essas duas DLLs para o diretório do seu executável (que deve estar dentro da pasta Debug ou Release) ou para o diretório Windows. A opção de colocar junto ao seu executável é melhor, pois evita o risco de erros caso você tiver versões diferentes do wxWidgets no seu sistema.
Abraços e vida longa ao C/C++.
wxWidgets ::: Dicas & Truques ::: wxApp
Como usar a classe wxApp em suas aplicações C++ wxWidgets
Quantidade de visualizações: 592 vezes
A classe wxApp (Application Class) é uma das primeiras classes que devemos estudar se quisermos ter um domínio perfeito do framework wxWidgets. Para usá-la, devemos incluir #include <wx/app.h> em nossos códigos. Essa classe herda de wxAppConsole.
Todas as aplicações wxWidgets definem uma classe application derivada de wxApp. Há somente uma instância dela, e essa instância representa a aplicação sendo executada no momento.
De todos os métodos herdados de wxApp, há pelo menos um que devemos implementar, e ele é a função OnInit(), que é chamada quando o wxWidgets está pronto para executar o nosso código. OnInit() equivale ao main() em C/C++ ou WinMain (aplicações Win32).
Veja um trecho de código no qual declaramos e usamos a classe wxApp:
Código para aplicacao.h:
// arquivo de definição
// declaramos a classe application
class MinhaAplicacao : public wxApp{
// é chamado no startup da aplicação
Código para aplicacao.cpp:
#include "aplicacao.h"
// aqui o wxWidgets implementa nosso objeto MinhaAplicacao
bool MinhaAplicacao::OnInit(){
// vamos mostrar uma mensagem ao iniciar a aplicação
wxMessageDialog *alerta = new wxMessageDialog(NULL,
wxT("A aplicação foi iniciada com sucesso"), wxT("Informação"), wxOK);
alerta->ShowModal();
// em geral retornamos true para iniciar o loop de eventos
// mas essa aplicação exibe apenas uma janela de mensagem. Podemos sair
Veja que no arquivo de declaração (header file) nós temos a macro DECLARE_APP. Ela nos permite declarar a função wxGetApp() que retorna uma referência para o objeto aplicação. Se não fizermos isso, a única forma de obter tal referência é usando o ponteiro global wxTheApp, que é do tipo wxApp*.
A macro IMPLEMENT_APP, no arquivo de implementação, permite ao wxWidgets criar dinamicamente uma instância do objeto application no ponto apropriado da inicialização da biblioteca.
Esse trecho de código é totalmente funcional, mas teremos apenas a exibição de uma mensagem wxMessageDialog. Por essa razão eu retornei false no laço de eventos. Se tivéssemos criado uma janela wxFrame, o retorno deveria ser true, já que teríamos de lidar com eventos.
Para finalizarmos, lembre-se de que o método OnInit() da classe wxApp é o local ideal para se fazer as verificações iniciais da aplicação, tais como conexão com banco de dados, permissão do usuário, disponibilidade da rede, etc.
wxWidgets ::: Dicas & Truques ::: wxFrame
Como usar a classe wxFrame para criar a janela principal de suas aplicações C++ wxWidgets
Quantidade de visualizações: 357 vezes
A classe wxFrame, definida no arquivo <wx/frame.h>, herda diretamente da classe wxTopLevelWindow (que herda de wxWindow) e, em geral, é usada para representar a janela principal da aplicação. Em tempo de execução seu tamanho pode ser alterado, maximizado, restaurado e minimizado. Esta janela também inclui uma borda mais grossa, uma barra de títulos e, opcionalmente, uma barra de menus, uma barra de ferramentas ou uma barra de status.
Uma wxFrame pode atuar como um contâiner para outros controles, tais como botões, caixa de texto, listas, tabelas, etc. No entanto, não podemos inserir em uma wxFrame uma outra wxFrame ou um diálogo.
O construtor não vazio da classe wxFrame é:
wxFrame::wxFrame(wxWindow* parent, wxWindowID id,
const wxString&  title, const wxPoint& pos = wxDefaultPosition,
const wxString& name = wxFrameNameStr)
O parâmetro parent pode ser, e geralmente é, NULL. Se esse valor for diferente de NULL, a frame será minimizada quando sua janela mãe foi minimizada e restaurada quando esta for restaurada. Note que estamos falando de aplicações de janelas de múltiplos documentos (janelas MDI).
O parâmetro id é o identificador da janela. Podemos informar -1 para indicar um valor default.
O parâmetro title é o texto a ser exibido na barra de títulos da janela.
O parâmetro pos é a posição da janela, expressa como um wxPoint (coordenada x e y). Se fornecermos o valor wxDefaultPosition para este parâmetro, a posição da janela será escolhida pelo sistema de janelas ou pela biblioteca wxWidgets, dependendo da plataforma.
O parâmetro size é o tamanho da janela, expresso como um wxSize (largura e altura). O valor wxDefaultSize indica o tamanho padrão (default), escolhido pelo sistema de janelas ou pela biblioteca wxWidgets, dependendo da plataforma.
O parâmetro style é o estilo da janela. O valor padrão é wxDEFAULT_FRAME_STYLE (que pode ser redimensionada, possui um botão de minimizar, de maximizar, etc).
O parâmetro name é usado para associar a janela com um item nomeado, permitindo a personalização individual da janela em sistemas que usam o Motif. No Windows este parâmetro não possui nenhum efeito.
Vamos ao código agora. Veja os arquivos de definição e de implementação para a criação de uma janela wxFrame:
Agora veja o arquivo de definição e de implementação necessários para a criação e exibição da nossa janela:
Código para aplicacao.cpp
// vamos criar nossa janela
JanelaPrincipal *janela = new JanelaPrincipal(wxT("Cadastro"),
// vamos exibir a janela wxFrame
janela->Show(TRUE);
// essa vai ser a janela principal da aplicação
SetTopWindow(janela);
// podemos iniciar o loop de eventos
Note que, para que a janela seja visível na tela, devemos fazer uma chamada ao método Show() e fornecer o valor TRUE. Esta função é definida originalmente em wxWindow. Veja também que chamamos SetTopWindow() para informar ao wxWidgets que esta é a janela principal, razão pela qual fornecemos o valor NULL para o parâmetro parent.
Veja mais Dicas e truques de wxWidgets
wxWidgets - Como baixar, compilar a biblioteca e criar um projeto C++ wxWidgets usando o Visual Studio 2017
wxWidgets - Como usar a classe wxFrame para criar a janela principal de suas aplicações C++ wxWidgets
PHP - Gráficos em PHP - Como verificar se a extensão GD está disponível na sua instalação do PHP
Java - Java Swing - Como criar e adicionar uma barra de menus à uma janela JFrame
Java - Java Básico - Exercícios Resolvidos de Java - Ex. 23 - Um programa que lê dois números inteiros e mostra o menor
Delphi - Como verificar se uma chave já existe no registro do Windows usando a função KeyExists() da classe TRegistry do Delphi
Java - Java Básico - Exercícios Resolvidos de Java - Ex. 14 - Ler um número inteiro, separar seus dígitos e imprimí-los individualmente separados por espaços