Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais
Home Informática Tutoriais e Programação Linguagem C Linguagem C - A primeira janela

Na Aldeia

Há 128 visitantes online

3630 registros
0 hoje
14 nesta semana
4 neste mês

Boas vindas: flor

Estatística

Membros: 3639
Artigos: 1045
Links: 90
Leituras: 6681487

Login



Kanji da hora




Faça contato






Dom

23

Nov

2008


00:41

Linguagem C - A primeira janela PDF Imprimir Indique esta página
(23 votos, média 4.5 de 5)
Escrito por vovó Vicki   


Índice do Artigo
Linguagem C - A primeira janela
A função WinMain
A função DialogFunc
Todas as páginas
C

O primeiro projeto ficou com gosto de "quero mais"? Se foi este o seu caso, o quero mais geralmente se refere a um programa Windows. Acontece que estamos apenas no terceiro módulo do tutorial e não é aconselhável queimar etapas. Então, o jeito é partir para a janelinha mais simples que existe: uma caixa de diálogo.

Apesar de simples, muitos conceitos serão abordados. Analise-os com atenção, pois são essenciais para o sistema operacional Windows e vamos precisar deles daqui pra frente. É importante entender todas as etapas e o mecanismo usado por este sistema operacional.

Um programa para o Windows

Hoje em dia a maioria dos aplicativos são controlados por uma GUI (Graphical User Interface). Com o uso de janelas, que têm controles como campos de edição, botões, menus, etc, a interatividade do usuário torna-se mais fácil e intuitiva.

Você viu na Introdução que a organização de um programa C exige SEMPRE uma função principal, geralmente denominada de main, por onde o programa é iniciado. No caso de um programa para o Windows, esta função é a WinMain (poderia ser diferente?). As funções utilizadas num programa Windows podem ser de dois tipos: aquelas que você programar (suas funções) e aquelas que fazem parte do sistema operacional Windows e estão prontinhas para serem usadas.

Todas as funções "usáveis" do Windows estão agrupadas por tipo em arquivos com a extensão . DLL (dynamic-linked libraries). O conjunto destas DLLs é chamado de API (Application Programming Interface). As principais DLLs são kernel32.dll, user32.dll e gdi32.dll. A kernel32.dll contém funções API que lidam com a memória e com a administração de processos, a user32.dll possui funções que controlam a aparência da interface do usuário e a gdi32.dll tem funções responsáveis por operações gráficas. São milhares de funções que, quando chamadas com os parâmetros corretos, criam as janelas e os controles da GUI (Ainda bem, já pensou ter que programar cada risquinho???).

O primeiro programa GUI para Windows

Crie um novo projeto clicando em |Project/Create|. Dê-lhe um nome (eu o chamei de testedlg) e indique o diretório onde o projeto deve ser colocado. Em "Options" assinale "Single user". Até aqui, tudo igual ao módulo anterior. Mas, para um programa Windows, siga os passos a seguir:

  1. Em "Type of project" assinale "Windows Application".
  2. Clique em [Create] e no diálogo "Do you want to use the wizard to generate the application skeleton?" (Quer usar o wizard para gerar o esqueleto do aplicativo?) clique em [Yes].
  3. Na caixa de diálogo "Application characteristics", em "Type of apllication", assinale a opção "Dialog based" e depois clique em [Ok].
  4. Clique em [OK] na caixa de mensagem avisando que o projeto foi criado.
  5. Na janela "Compiler settings", clique em [Next]. Na janela "Linker settings", clique em [Next]. Na janela "Debugger settings", clique em [Finish].

Surpresa! A janela de edição mostra nosso programa gentilmente preparado pelo lcc-win32. Mordomia pura, pois o programa está pronto. Basta compilá-lo com |Compiler/Compile testedlg.c| e rodá-lo com |Compiler/Execute testedlg.exe| para ver o resultado.

Testedlg

O programa montado pelo lcc

Não se assuste com todo este código, mesmo porque vamos cansar de vê-lo e, pode ter certeza, a gente acaba se acostumando. Observe que o programa possui três funções: WinMain (linha 10), InitializaApp (linha 33) e a DialogFunc (linha 38). A InitializaApp não faz nada além de retornar 1 - serve apenas de gancho se quisermos configurar alguma coisa antes da caixa de diálogo ser mostrada. Vou tentar explicar em detalhes as outras duas, a WinMain e a DialogFunc.

  1. #include <windows.h>
  2. #include <windowsx.h>
  3. #include <commctrl.h>
  4. #include <string.h>
  5. #include "testedlgres.h"
  6.  
  7. static BOOL CALLBACK DialogFunc(
  8. HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
  9.  
  10. int APIENTRY WinMain(
  11. HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nCmdShow)
  12. {
  13. WNDCLASS wc;
  14. INITCOMMONCONTROLSEX cc;
  15.  
  16. memset(&wc,0,sizeof(wc));
  17. wc.lpfnWndProc = DefDlgProc;
  18. wc.cbWndExtra = DLGWINDOWEXTRA;
  19. wc.hInstance = hinst;
  20. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  21. wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
  22. wc.lpszClassName = "testedlg";
  23. RegisterClass(&wc);
  24. memset(&cc,0,sizeof(cc));
  25. cc.dwSize = sizeof(cc);
  26. cc.dwICC = 0xffffffff;
  27. InitCommonControlsEx(&cc);
  28.  
  29. return DialogBox(
  30. hinst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, (DLGPROC) DialogFunc);
  31. }
  32.  
  33. static int InitializeApp(HWND hDlg,WPARAM wParam, LPARAM lParam)
  34. {
  35. return 1;
  36. }
  37.  
  38. static BOOL CALLBACK DialogFunc(
  39. HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
  40. {
  41. switch (msg) {
  42. case WM_INITDIALOG:
  43. InitializeApp(hwndDlg,wParam,lParam);
  44. return TRUE;
  45. case WM_COMMAND:
  46. switch (LOWORD(wParam)) {
  47. case IDOK:
  48. EndDialog(hwndDlg,1);
  49. return 1;
  50. case IDCANCEL:
  51. EndDialog(hwndDlg,0);
  52. return 1;
  53. }
  54. break;
  55. case WM_CLOSE:
  56. EndDialog(hwndDlg,0);
  57. return TRUE;
  58. }
  59. return FALSE;
  60. }


Última atualização ( Seg, 09.03.2009 07:20 )
 

Topo

Topo

Exceto onde especificamente citado, todo material deste site está sob Licença Creative Commons