C++ & Windows
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:

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 ;

/* Inicialização*/

while( c=getch() != 's' ) {

switch( c ){
case 'a':
opcao_a() ;
break ;
case 'b' :
opcao_b() ;
break ;
} ;
} ;

/* Finalização */

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.
MSG msg ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&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.

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)
{
case WM_COMMAND :
MessageBeep(0);
case WM_DESTROY :
PostQuitMessage(0);
break;
default :
return DefWindowProc(hWnd, wMessage, wParam, lParam);
}
return 0L;
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.
 
 

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ê!
 
 


1