Buscar

15. Programação para Windows

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Ju
d
so
n
 S
an
to
s 
S
an
ti
ag
o
PROGRAMAÇÃO PARA WINDOWS
Programação de Computadores
Programação no Windows
 O Windows é um sistema operacional 
multitarefa
 Vários programas rodam concorrentemente 
disputando por recursos:
 Memória
 Processador
 Acesso à periféricos:
vídeo, teclado, 
mouse, 
disco rígido
Programação no Windows
 Cada programa é executando por uma fração de 
segundos, fornecendo a falsa impressão de que 
todos executam simultaneamente
Programação no Windows
 Os programas escritos para Windows não 
acessam o hardware diretamente
Word Paint Calc
API (Win32, MFC, .NET)
Sistema Operacional
Hardware
Programação no Windows
 A interface consistente é o resultado do uso 
de rotinas padronizadas de uma API 
 As janelas têm a mesma interface porque elas são 
construídas pelas funções da API 
 Estas funções padronizadas são compartilhadas 
em arquivos DLL (Dinamic Link Libraries)
Programação no Windows
 Nas versões iniciais, a maior parte do 
Windows estava em três DLLs. Elas 
continham os três subsistemas principais:
 Kernel (kernel32.dll): gerenciamento de memória, 
entrada/saída de arquivos e escalonamento de 
tarefas
 User (user32.dll): interface do usuário e lógica de 
controle das janelas
 GDI (gdi32.dll): permite ao programa mostrar 
texto e gráficos na tela e impressora
Programação no Windows
 Hoje o Windows possui milhares de funções 
disponibilizadas em suas DLLs
 As funções são declaradas em arquivos de 
cabeçalho (Ex.: windows.h)
 A documentação está disponível no MSDN
(Microsoft Developer Network) 
 O uso destas funções é semelhante ao uso de 
uma função da biblioteca padrão da 
linguagem C/C++, como strlen()
Criando Projeto Windows
Criar um projeto no Visual Studio 2012: 
File > New > Project
Criando Projeto Windows
Criar um projeto Win32: 
Visual C++ > Win32 > Win32 Project > ProgWin
Criando Projeto Windows
Criar um projeto Win32: 
Next
Criando Projeto Windows
Criar um projeto Win32: 
Windows application > Empty project > Finish
Criando Projeto Windows
Configurando Projeto Win32: 
Project > Properties
Criando Projeto Windows
Configurando Projeto Win32: 
Configuration Properties > General > Character Set > Not Set 
Primeiro Programa Windows
 O primeiro programa para Windows:
 Saída:
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, "Oi Windows!", "Mensagem Oi", 0);
return 0;
}
Os Cabeçalhos
 A diretiva de pre-processamento #define 
inclui o arquivo de cabeçalho windows.h
 Windows.h é um arquivo de cabeçalho 
mestre que inclui vários outros:
 Windef.h - definições de tipos básicos
 Winbase.h - funções do kernel
 Winuser.h - funções de interface com o usuário
 Wingdi.h - interface com o dispositivo gráfico
#include <windows.h>
A Função WinMain
 WinMain é o ponto de entrada para todo 
programa Windows, assim como main é o 
ponto de entrada para programas no console 
em modo texto
 WINAPI é definido em windef.h como:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
#define WINAPI __stdcall
Os Parâmetros
 hInstance – manipulador de instância, ou seja, um 
número para identificar a aplicação
 hPrevInstance – sempre nulo (parâmetro era 
usado em Win16 – Windows 3.1)
 szCmdLine – linha de comando passada na 
chamada do programa
 iCmdShow – define como o programa deve ser 
inicializado (maximizado, minimizado, tela cheia)
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
A Caixa de Mensagem
 Caixas de mensagens foram projetadas para 
mostrar mensagens curtas
 Parâmetros:
 Manipulador da janela (window handle)
 String de texto com a mensagem 
 Texto da barra de título da janela
 Define o estilo da caixa de mensagem
MessageBox (NULL, "Oi Windows!", "Mensagem Oi", 0);
A Caixa de Mensagem
 Os estilos da caixa de mensagem podem ser 
alterados passando uma das constantes 
abaixo como último argumento
MessageBox(NULL, 
"Iniciar a Instalação?", 
"Mensagem",
MB_OKCANCEL);
#define MB_OK 0x00000000L 
#define MB_OKCANCEL 0x00000001L 
#define MB_ABORTRETRYIGNORE 0x00000002L 
#define MB_YESNOCANCEL 0x00000003L 
#define MB_YESNO 0x00000004L 
#define MB_RETRYCANCEL 0x00000005L
A Caixa de Mensagem
 As constantes podem ser combinadas com o 
operador binário OR (|) para indicar qual é o 
botão padrão
MessageBox(NULL, 
"Cancelar a Instalação?", 
"Mensagem",
MB_YESNO | MB_DEFBUTTON2);
#define MB_DEFBUTTON1 0x00000000L
#define MB_DEFBUTTON2 0x00000100L
#define MB_DEFBUTTON3 0x00000200L
#define MB_DEFBUTTON4 0x00000300L
A Caixa de Mensagem
 É possível também mostrar um ícone na caixa 
de mensagem
MessageBox(
NULL, 
"Prosseguir com a operação?", 
"Mensagem",
MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION);
#define MB_ICONHAND 0x00000010L
#define MB_ICONQUESTION 0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK 0x00000040L
A Caixa de Mensagem
 A função MessageBox retorna o valor 1 se o 
botão OK for clicado, mas é mais correto 
dizer que ela retorna IDOK
MessageBox (NULL, 
"Operação Inválida!", 
"Mensagem",
MB_OK | MB_ICONWARNING);
#define IDOK 1
#define IDCANCEL 2
#define IDABORT 3
#define IDRETRY 4
#define IDIGNORE 5
#define IDYES 6
#define IDNO 7
A Caixa de Mensagem
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
int resp;
resp = MessageBox(NULL, 
"Presseguir com a operação?", 
"Mensagem", 
MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION);
if (resp == IDYES)
{
MessageBox(NULL, 
"Operação Inválida!", 
"Mensagem", 
MB_OK | MB_ICONWARNING);
}
return 0 ;
}
Criação de Janelas
 A caixa de mensagens é uma janela de 
propósito especial
 Para criar uma janela de propósito geral é 
preciso chamar a função CreateWindow
 Toda janela é baseada numa WindowClass Name
 Toda janela precisa de uma Window Procedure
 Para entender os argumentos da função 
CreateWindow é preciso conhecer a 
arquitetura do Windows
Criação de Janelas
msg 1
msg 2
msg 3
msg 4
...
msg n
Fila de mensagens
do sistema
Fila de 
mensagens 
locais
Fila de 
mensagens 
locais
WinProc()
WinMain()
{
}
WinProc()
WinMain()
{
}
Criação de Janelas
 A função Principal WinMain
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
// - Defina uma Window Class Name
// - Registre a Window Class Name
// - Cria uma janela baseada na Window Class Name
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
Criação de Janelas
 Definindo uma Window Class Name
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WinProc;
wndclass.cbClsExtra = 0; // bytes extra 
wndclass.cbWndExtra = 0; // bytes extra 
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "SimpleClass";
if (!RegisterClass (&wndclass))
{
MessageBox(NULL, "Erro na criação da janela!", 
"Aplicação", MB_ICONERROR) ;
return 0 ;
}Criação de Janelas
 A função CreateWindow
HWND hwnd;
hwnd = CreateWindow(
"SimpleClass", // window class name
"Aplicação", // título da janela
WS_OVERLAPPEDWINDOW, // tipo da janela
CW_USEDEFAULT, // posição x inicial
CW_USEDEFAULT, // posição y inicial
CW_USEDEFAULT, // largura inicial
CW_USEDEFAULT, // altura inicial
NULL, // identificador da janela pai
NULL, // identificador do menu
hInstance, // identificador do programa
NULL); // parâmetros de criação
Criação de Janelas
 A função CreateWindow cria uma janela cuja 
interação pode ser capturada e tratada numa 
Window Procedure
Fila de 
mensagens 
locais
WinProc()
WinMain()
{
}
Criação de Janelas
 Definindo uma Window Procedure
LRESULT CALLBACK WinProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
PAINTSTRUCT ps;
RECT rect;
switch (message) 
{
case WM_CREATE:
return 0;
case WM_PAINT:
HDC hdc = BeginPaint(hwnd, &ps); 
GetClientRect (hwnd, &rect);
DrawText (hdc, "Minha Janela!", -1, &rect, DT_CENTER | DT_VCENTER);
EndPaint (hwnd, &ps) ;
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
Criação de Janelas
 Uma lista resumida de mensagens:
Mensagem Significado
WM_ACTIVATE Enviado quando uma janela recebe o foco
WM_CLOSE Enviado quando uma janela é fechada
WM_CREATE Enviado quando uma janela é criada
WM_DESTROY Enviado quando uma janela está para ser destruída
WM_MOVE Enviado quando uma janela foi movida
WM_MOUSEMOVE Enviado quando o mouse é movimentado
WM_KEYUP Enviado quando uma tecla é solta
WM_KEYDOWN Enviado quando uma tecla é pressionada
WM_PAINT Enviado quando a janela precisa ser redesenhada
WM_SIZE Enviado quando uma janela mudou de tamanho
Criação de Janelas
 O código apresentado pode ser usado como 
ponto de partida para qualquer programa 
Windows
 A função CreateWindow é usada também 
para criar janelas filhas:
 Label, botão, barra de rolagem, 
caixa de texto, checkbox, 
groupbox, listbox, picturebox, 
radiobutton, etc.
Exercício
 Construir um aplicativo para descobrir se uma 
palavra é um palíndromo
Conclusão
 O Windows é o sistema operacional 
dominante no segmento de desktop
 Para criar aplicativos para Windows o 
programador deve usar as funções e o 
modelo de programação da API escolhida
 A API Win32 permite a criação de programas 
em linguagem C/C++ através da ligação 
dinâmica do aplicativo às bibliotecas da API

Outros materiais