Por que Windows?Não é a toa que o Windows é o ambiente operacional mais utilizado no mundo inteiro. Ele oferece inúmeras vantagens, tanto para o usuário quanto para o programador. Na minha opinião, quem sai ganhando é o programador, pois programar em Windows atualmente é tão fácil quanto programar para DOS, com a diferença de que o resultado é muito melhor.
A lista a seguir apenas ilustra algumas das vantagens do Windows:
- Interface gráfica amigável, intuitiva e padronizada;
- Rotinas para acesso ao vídeo e à impressora: "independente de dispositivo";
- Suporte ao mouse, multimídia, redes, scanners, e outros dispositivos;
- Utilização de toda a memória do computador, sem as limitações de 640K do DOS, além da chamada "memória virtual";
- Recursos dos processadores mais modernos de 32 e 64 bits;
- Multitarefa, multi-thread e proteção dos dados.
- Troca de dados entre aplicativos, através da área de transferência, DDE e OLE.
Mudando paradigmas
O preço que se paga ao desenvolver um aplicativo para o Windows, é a mudança total dos conceitos de programação. Porém, uma vez familiarizado, nota-se a diferença.
Para começar, um programa Windows deve ser bem educado, pedindo ao Sr. Sistema Operacional que gerencie a memória, pois como esta é utilizada por vários aplicativos ao mesmo tempo, torna-se um recurso raro e precioso, não devendo haver desperdício nem abusos.
Outro aspecto importante é a linha de raciocínio a ser seguida. Em DOS, escrevia-se programas em uma linha contínua e um dado momento esperava-se uma ação do usuário para então respondê-la. O código a seguir escrito em C exemplifica isto:
char c ;Já em Windows, ao invés de se esperar uma tecla pressionada, espera-se uma mensagem. Mensagem é uma notificação, proveniente do próprio Windows, solicitando uma determinada ação./* Inicialização*/
while( c=getch() != 's' ) {
switch( c ){} ;case 'a':} ;
opcao_a() ;
break ;
case 'b' :
opcao_b() ;
break ;/* Finalização */
MSG msg ;Este é um típico código escrito para receber, "traduzir" e "despachar" mensagens. As três funções são fornecidas pelo próprio Windows e a variável msg é do tipo MSG, que por sua vez é uma estrutura que contém basicamente o identificador da mensagem e alguns parâmetros.
while (GetMessage (&msg, NULL, 0, 0))
{TranslateMessage (&msg) ;} ;
DispatchMessage (&msg) ;Este trecho, porém não é tudo para um programa Windows. Deve-se ante de mais nada criar uma janela, pois neste ambiente tudo baseia-se em janelas. A função CreateWindow se encarrega disto, mas é claro devemos especificar um monte de parâmetros, entre eles uma função que se encarregará de responder à mensagens, no caso do código a seguir, a função MainWndProc.
#include <windows.h>
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM) ;
HINSTANCE hInst;
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow )
{MSG msg;}
HWND hWndMain;
WNDCLASS wndclass;
hInst = hInstance;
if(!hPrevInstance)
{wndclass.style = CS_HREDRAW | CS_VREDRAW ;}
wndclass.lpfnWndProc = MainWndProc ;
wndclass.hInstance = hInstance ;
wndclass.lpszClassName = "TESTE" ;
if(!RegisterClass(&wndclass)) return FALSE;
if( !(hWndMain = CreateWindow(szAppName, "Application Caption",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL)))return FALSE;
ShowWindow(hWndMain, nCmdShow);
UpdateWindow(hWndMain);
while(GetMessage(&msg, NULL, 0, 0))
{TranslateMessage(&msg);}
DispatchMessage(&msg);
return msg.wParam;LRESULT CALLBACK MainWndProc(HWND hWnd, UINT wMessage,
WPARAM wParam, LPARAM lParam)
{switch(wMessage)Fazendo uma análise do código, percebemos que hão uma função main, mas sim uma WinMain! Esta função aceita alguns parâmetros de não muita importância e se encarrega de "registrar" e criar a janela principal, especificando a função MainWndProc para lidar com as mensagens. Esta última trata apenas de duas mensagens: WM_COMMAND e WM_DESTROY, e deixa as demais a cargo da função DefWindowProc, que é uma função padrão do Windows para tratamento de mensagens.
{case WM_COMMAND :}
MessageBeep(0);
case WM_DESTROY :
PostQuitMessage(0);
break;
default :
return DefWindowProc(hWnd, wMessage, wParam, lParam);
return 0L;
Onde entra o C++
Você provavelmente achou o programa um pouco confuso e de difícil compreensão, não? Este é um problema da programação para Windows. Este método é chamado de programação em API (API = Application Programming Interface, ou interface de programação de aplicativos), uma vez que faz uso exaustivo das funções da API do Windows: CreateWindow, GetMessage, TranslateMessage, etc.
Felizmente existem métodos de programação mais eficientes e elegantes. O VisualBasic, por exemplo, realiza todo o trabalho sujo de criação de janelas, mensagens e tudo mais, deixando tudo isso transparente ao programador que tem a seu dispor funções de alto nível como nos antigos interpretadores BASIC. Por outro lado, não tem controle sobre a máquina, não podendo executar operações de baixo nível como em C.
O VisualObjects permite aos programadores Clipper transportarem seus aplicativos para Windows de uma maneira muito suave e prática, contudo é voltado ao desenvolvimento de banco de dados.
A Borland, felizmente, revolucionou a programação para Windows dando à linguagens C++ o poder da programação visual. Com a versão 3.0 do compilador C++ a Borland inclui uma biblioteca de funções e classes chamada de ObjectWindows Library. Atualmente esta biblioteca foi substituída por uma ainda mais poderosa: a VisualControl Library, presente não somente em compiladores C/C++ mas também em compiladores Pascal, batizados agora de Delphi.
Por onde começar
O primeiro passo a ser dado é adquirir um bom compilador C++ para Windows. Eu recomendo a linha Borland, por uma série de vantagens. Em especial o Borland C++ 5.02, ou para quem não quer gastar tanto, o Borland C++ 4.52. Eu sinceramente não recomendo a nova linha do C++ Builder (atualmente na versão 4), pois esta não oferece muitos recursos, especialmente os de baixo nível, e também não permite manter o código sob controle.
Um bom livro é a segunda etapa. Na verdade, nenhum livro substitui os manuais do programa. Mas para quem não tem a versão original do produto, alguns livros podem facilmente substitui-los. O melhor de todos, na minha opinião é Teach Yourself Borland C++ 4 in 21 days de Namir Clement Shammas, Craig Arnush e Edward Mulroy. A editora é a SAMS e aqui no Brasil ele deve existir com algum nome parecido com Aprenda Borland C++ 4 em 21 dias.
Depois de uma leitura detalhada (realmente se aprende em 21 dias!) o ideal é partir para "brincar" com o C++. Coloque em mente um pequeno programa e vá desenvolvendo-o. Em caso de dúvida, o próprio Help da Borland é perfeito. Contém exemplos, dicas, instruções detalhadas e tudo mais. Tudo isso em inglês, é claro. Mas se você não lê em inglês, não se desespere: o inglês do segundo grau já quebra o galho. Aproveite e estude inglês também!
Qualquer pergunta, dúvida, sombra de dúvida, penumbra de dúvida (palavras roubadas de meu ex-professor de Telecomunicações, Irineu Ronconi!), entre em contato comigo! Estou disposto a quebrar galho para você!