Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Estácio de Sá 
Professor Rogério 	 	 Disciplina: Linguagem de Programação 
Curso de Engenharia Civil , Engenharia de Produção e Automação
Projeto de Interface Gráfica
Ao aprender C/C++, geralmente, se aprende a deselvolver programas no console certo? Se por acaso, tivéssimos que desenvolver um programa onde existam caixas de textos, botões, listas de itens, etc? É nesta parte que entra a GUI - Graphical User Interface ou Interface Grífica do Usírio, ou simplesmente "interface grífica" - uma tecnologia utilizada em sistemas operacionais para aplicar ao software, ícones, gráficos, controle por mouse, dentre outros, com o objetivo de fazer com que o usuário interaja com o tal software. 
Neste tutorial, demonstrarei os principais fundamentos, exemplos da programação GUI em ambiente WIN32.
1) Crie um novo arquivo : "interface.cpp".
2) Adicione o seguinte código ao arquivo criado (utilize o copiar e colar, salve e rode o programa com F9).
3) Durante a execução aparecerá a tela do MS-DOS(tela preta), mas também a janela de interface gráfica.
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM 
wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
MSG message;	
HWND hwnd;
WNDCLASSEX wc;
wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc.lpfnWndProc=WinProc;
wc.lpszClassName="Janela";
wc.lpszMenuName=NULL;
wc.style=0;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(0,"Janela","Clinica Boa Vida",WS_OVERLAPPED|WS_SYSMENU,50,50,600,600,NULL,NULL,NULL,NULL);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
	TranslateMessage(&message);
	DispatchMessage(&message);
}
return message.wParam ;
}
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam){
switch(msg)
{
case WM_CLOSE:
	PostQuitMessage(0);
	break;
default: return DefWindowProc(window,msg,wParam,lParam);
}
return 0;
}
Comandos:
wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
O que faz? Cor de fundo da janela.
Parâmetros: COLOR_3DFACE, COLOR_3DHIGHLIGHT, COLOR_3DHILIGHT, COLOR_3DSHADOW, COLOR_ACTIVEBORDER, COLOR_BTNHIGHLIGHT, COLOR_BTNHILIGHT.
wc.hCursor=LoadCursor(NULL,IDC_WAIT);
O que faz? Ponteiro do mouse.
Parâmetros: IDC_HAND, IDC_CROSS, IDC_HELP, IDC_NO (esta opção é interessante), IDC_SIZEALL, IDC_WAIT
wc.hIconSm=LoadIcon(NULL,IDI_EXCLAMATION); 
O que faz? O ícone da janela
Parâmetros: IDI_EXCLAMATION, IDI_INFORMATION, IDI_QUESTION, IDI_WARNING
hwnd = CreateWindowEx
(0,"Janela","Clinica Boa Vida",WS_OVERLAPPED|WS_SYSMENU,50,50,600,600,NULL,NULL,NULL,NULL);
O que faz? Informações sobre a janela a ser criada, isto é, título da janela, distância do topo da tela e distância a esquerda da tela, tamanho em pixels (largura e altura).
WS_OVERLAPPED : O que faz? Uma janela sobreposta geralmente tem uma legenda e uma borda.
WS_SYSMENU : O que faz? Cria uma janela que tem uma caixa com menu de controle em sua barra de título. Usado somente para janelas com barras de título.
Altere: 
hwnd = CreateWindowEx (0,"Janela","Clinica Boa Vida", WS_SIZEBOX ,250,50,100,600,NULL,NULL,NULL,NULL);
WS_SIZEBOX : O que faz?  Cria uma janela que tem uma borda de redimensionamento. 
Altere:
hwnd = CreateWindowEx
(0,"Janela","Clinica Boa Vida",WS_SIZEBOX|WS_SYSMENU|WS_VSCROLL,50,50,600,600,NULL,NULL,NULL,NULL);
	WS_VSCROLL: O que faz? Cria uma janela que tem uma barra de rolagem vertical.
ShowWindow(hwnd,SW_SHOW);
O que faz? Tipo de janela (inicialmente maximizada, minimizada ou no formato definido pelo usuário) 
Parâmetros: SW_MINIMIZE, SW_MAXIMIZE.
Exercício
O paciente do sexo masculino pode fazer raiox (custo de R$ 300,00), sangue (R$ 150,00) e espermograma (R$ 250,00) e o paciente do sexo feminino pode fazer raiox (custo de R$ 300,00), sangue (R$ 150,00) e gravidez (R$ 122,00).
Desenvolva um programa que calcule o valor a ser pago pelo cliente. 
Considere que a Clínica cobra uma taxa fixa de R$ 250,00 pelo atendimento. Dado o exemplo:
Paciente do sexo masculino: Exames feitos de sangue e espermograma, custo total de 650,00.
Paciente do sexo feminino: Exames feitos de raiox e gravidez, custo total de 672,00.
Passo 1:
Definir a criação dos componentes da Janela.
/* site da documentação interface gráfica.
http://www.forum-invaders.com.br/vb/showthread.php/8290-Tutorial-Interface-Gr%C3%A1fica-(GUI)-C-C
*/
#include <windows.h>
#include <stdio.h>
//Definimos um nome para os controles
#define label_1 1
#define label_2 2
#define radio_1 3
#define radio_2 4
#define texto_1 6
#define check_1 7
#define check_2 8
#define check_3 9
#define check_4 10
#define label_3 11
#define label_4 12
#define label_5 13
//HWND dos controles
HWND texto1;
HWND radio1,radio2;
HWND label1, label2, label3, label4,label5;
HWND check1, check2, check3,check4;
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM 
wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
MSG message;
HWND hwnd;
WNDCLASSEX wc;
wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc.lpfnWndProc=WinProc;
wc.lpszClassName="Janela";
wc.lpszMenuName=NULL;
wc.style=0;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(0,"Janela","Clinica Boa Vida",WS_OVERLAPPED|WS_SYSMENU,50,50,600,600,NULL,NULL,NULL,NULL);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
	TranslateMessage(&message);
	DispatchMessage(&message);
}
return message.wParam ;
}
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam){
switch(msg)
{
case WM_CLOSE:
	PostQuitMessage(0);
	break;
case WM_CREATE: //No processo de criação da janela
 label1 = CreateWindowEx(0,"STATIC","PACIENTE:" ,WS_CHILD|WS_VISIBLE,60,50,80,40,window,(HMENU)label_1,0,0);
 texto1 = CreateWindowEx(0,"EDIT","" ,WS_CHILD|WS_VISIBLE|WS_BORDER,140,50,370,20,window,(HMENU)texto_1,0,0); //Cria nosso textbox
 label2 = CreateWindowEx(0,"STATIC","SEXO:" ,WS_CHILD|WS_VISIBLE,60,80,60,40,window,(HMENU)label_2,0,0);
 radio1 = CreateWindowEx(0,"BUTTON","Masculino", WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,60,100,240,15,window,(HMENU)radio_1,0,0);
 radio2 = CreateWindowEx(0,"BUTTON","Feminino" , WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,60,120,240,15,window,(HMENU)radio_2,0,0); 
 label3 = CreateWindowEx(0,"STATIC","TIPO DE EXAME:" , WS_CHILD|WS_VISIBLE, 60,160,180,80,window,(HMENU)label_3,0,0);
 check1 = CreateWindowEx(0,"BUTTON","RaioX" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,60,180,100,20,window,(HMENU)check_1,0,0); 
 check2 = CreateWindowEx(0,"BUTTON","Sangue" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,60,220,100,20,window,(HMENU)check_2,0,0); 
 check3 = CreateWindowEx(0,"BUTTON","Espermograma" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,200,180,120,20,window,(HMENU)check_3,0,0);
 check4 = CreateWindowEx(0,"BUTTON","Gravidez" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,200,220,100,20,window,(HMENU)check_4,0,0); 
 label4 = CreateWindowEx(0,"STATIC","VALOR A PAGAR:" ,WS_CHILD|WS_VISIBLE,60,280,180,80,window,(HMENU)label_4,0,0);
 label5 = CreateWindowEx(0,"STATIC","" ,WS_CHILD|WS_VISIBLE|WS_BORDER, 180,280,80,30,window,(HMENU)label_5,0,0);
 
 break;
case WM_COMMAND: //Mensagem enviada quando se clica em um controle
	switch(wParam) //Verifica o parâmetro
	{
 } 
 break;default: return DefWindowProc(window,msg,wParam,lParam);
}
return 0;
}
Comandos:
 LABEL:
Para que serve? Label é um texto informativo. No caso acima é o paciente, sexo, tipo de sangue e o valor a pagar.
Parâmetros: 	Static > indica a criação da Label.
 	“PACIENTE: “ > Texto da Label.
		WS_CHILD > janela filha.
		WS_VISIBLE > Label visível.
		60, 50, 80, 40 > distância do topo, distância à esquerda, comprimento e largura.
WINDOW > Identificação do objeto principal, onde o controle no nosso caso, será criado.
(HMENU)label_1-> Identifação do nosso objeto.
 label1 =
 CreateWindowEx(0,"STATIC","PACIENTE:" ,WS_CHILD|WS_VISIBLE,60,50,80,40,window,(HMENU)label_1,0,0);
EDIT: 
Para que serve? Text (caixa de texto) é um campo que recebe dados via teclado. No caso acima é o nome.
Parâmetros: 	EDIT > indica a criação do campo para entrada de dados.
		"" > valor inicial , nesse caso vazio.
		WS_BORDER > campo com borda
Classe: EDIT (Estilos comuns)
ES_AUTOVSCROLL -> Rolagem vertical automítica.
ES_AUTOHSCROLL -> Rolagem horizontíl automatica.
ES_MULTILINE -> Múltiplas linhas.
ES_NUMBER -> Apenas números.
ES_PASSWORD -> Password (não se combina com ES_MULTILINE).
ES_READONLY -> Apenas leitura.
ES_UPPERCASE -> Apenas caixa alta. 
WS_HSCROLL -> Barra de rolagem horizontal (Necessita ES_MULTILINE).
WS_VSCROLL -> Barra de rolagem vertical (Necessita ES_MULTILINE).
texto1 =
CreateWindowEx(0,"EDIT","" ,WS_CHILD|WS_VISIBLE|WS_BORDER,140,50,370,20,window,(HMENU)texto_1,0,0);
RADIO:
Para que serve? Radio são usados ​​quando o usuário pode escolher entre uma - e apenas uma - opção de um conjunto de alternativas.
Parâmetros: 	BUTTON > Cria um botão e com a opção BS_AUTORADIOBUTTON , cria um RADIO.
 radio1 =
 CreateWindowEx(0,"BUTTON","Masculino", 
 WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,60,100,240,15,window,(HMENU)radio_1,0,0);
 radio2 =
CreateWindowEx(0,"BUTTON","Feminino" , WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,60,120,240,15,window,(HMENU)radio_2,0,0);
CHECKBOX:
Para que serve? Checkbox são usados ​​quando o usuário pode escolher entre uma ou mais opções de um conjunto de alternativas.
Parâmetros: 	WS_DISABLED > opção desmarcada
 		BS_AUTOCHECKBOX> ess opção cria um CHECKBOX.
check1 =
 CreateWindowEx(0,"BUTTON","RaioX" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,60,180,100,20,window,(HMENU)check_1,0,0);
Programa Pronto com as codificações dos botões.
#include <windows.h>
#include <stdio.h>
//Definimos um nome para os controles
#define label_1 1
#define label_2 2
#define radio_1 3
#define radio_2 4
#define texto_1 6
#define check_1 7
#define check_2 8
#define check_3 9
#define check_4 10
#define label_3 11
#define label_4 12
#define label_5 13
//HWND dos controles
HWND texto1;
HWND radio1,radio2;
HWND label1, label2, label3, label4,label5;
HWND check1, check2, check3,check4;
float total, diferenca;
char buffer[16];
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM 
wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
MSG message;
HWND hwnd;
WNDCLASSEX wc;
wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc.lpfnWndProc=WinProc;
wc.lpszClassName="Janela";
wc.lpszMenuName=NULL;
wc.style=0;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(0,"Janela","Clinica Boa Vida",WS_OVERLAPPED|WS_SYSMENU,50,50,600,600,NULL,NULL,NULL,NULL);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
	TranslateMessage(&message);
	DispatchMessage(&message);
}
return message.wParam ;
}
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam){
switch(msg)
{
case WM_CLOSE:
	PostQuitMessage(0);
	break;
case WM_CREATE: //No processo de criação da janela
 label1 = CreateWindowEx(0,"STATIC","PACIENTE:" ,WS_CHILD|WS_VISIBLE,60,50,80,40,window,(HMENU)label_1,0,0);
 texto1 = CreateWindowEx(0,"EDIT","" ,WS_CHILD|WS_VISIBLE|WS_BORDER,140,50,370,20,window,(HMENU)texto_1,0,0); //Cria nosso textbox
 label2 = CreateWindowEx(0,"STATIC","SEXO:" ,WS_CHILD|WS_VISIBLE,60,80,60,40,window,(HMENU)label_2,0,0);
 radio1 = CreateWindowEx(0,"BUTTON","Masculino", WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,60,100,240,15,window,(HMENU)radio_1,0,0);
 radio2 = CreateWindowEx(0,"BUTTON","Feminino" , WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,60,120,240,15,window,(HMENU)radio_2,0,0); 
 label3 = CreateWindowEx(0,"STATIC","TIPO DE EXAME:" , WS_CHILD|WS_VISIBLE, 60,160,180,80,window,(HMENU)label_3,0,0);
 check1 = CreateWindowEx(0,"BUTTON","RaioX" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,60,180,100,20,window,(HMENU)check_1,0,0); 
 check2 = CreateWindowEx(0,"BUTTON","Sangue" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,60,220,100,20,window,(HMENU)check_2,0,0); 
 check3 = CreateWindowEx(0,"BUTTON","Espermograma" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,200,180,120,20,window,(HMENU)check_3,0,0);
 check4 = CreateWindowEx(0,"BUTTON","Gravidez" , WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_AUTOCHECKBOX,200,220,100,20,window,(HMENU)check_4,0,0); 
 label4 = CreateWindowEx(0,"STATIC","VALOR A PAGAR:" ,WS_CHILD|WS_VISIBLE,60,280,180,80,window,(HMENU)label_4,0,0);
 label5 = CreateWindowEx(0,"STATIC","" ,WS_CHILD|WS_VISIBLE|WS_BORDER, 180,280,80,30,window,(HMENU)label_5,0,0);
 
 break;
case WM_COMMAND: //Mensagem enviada quando se clica em um controle
	switch(wParam) //Verifica o parâmetro
	{
	case radio_1:
 diferenca=250;
 if(SendMessage(check1,BM_GETCHECK,0,0) == BST_CHECKED){
 diferenca=diferenca+300;
 } 
 if(SendMessage(check2,BM_GETCHECK,0,0) == BST_CHECKED){
 diferenca=diferenca+150;
 }
 if(SendMessage(check3,BM_GETCHECK,0,0) == BST_CHECKED){
 diferenca=diferenca+250;
 }
 total = diferenca;
 EnableWindow(check1,1);
 EnableWindow(check2,1);
 EnableWindow(check3,1);
 EnableWindow(check4,0);
 sprintf (buffer,"%.2f",total);
 SetWindowText(label5,buffer); 
 	break; 
 case radio_2:
 diferenca=250;
 if(SendMessage(check1,BM_GETCHECK,0,0) == BST_CHECKED){
 diferenca=diferenca+300;
 } 
 if(SendMessage(check2,BM_GETCHECK,0,0) == BST_CHECKED){
 diferenca=diferenca+150;
 }
 if(SendMessage(check4,BM_GETCHECK,0,0) == BST_CHECKED){
 diferenca=diferenca+122;
 }
 total = diferenca; 
 EnableWindow(check1,1);
 EnableWindow(check2,1);
 EnableWindow(check3,0);
 EnableWindow(check4,1);
 sprintf (buffer,"%.2f",total);
 SetWindowText(label5,buffer); 
 break; 
	
	case check_1: 
 if(SendMessage(check1,BM_GETCHECK,0,0) == BST_CHECKED){ 
 total = total + 300;
 	}
		else
		{
	 total = total - 300; 
		}
 sprintf (buffer,"%.2f",total);
 SetWindowText(label5,buffer); 
 break;
 case check_2: 
		 if(SendMessage(check2,BM_GETCHECK,0,0) == BST_CHECKED){ 
 total = total + 150;
 	}
		else
		{
	 total = total - 150; 
		}
 sprintf (buffer,"%.2f",total);
 SetWindowText(label5,buffer); 
 break;
 case check_3:
		 if(SendMessage(check3,BM_GETCHECK,0,0) == BST_CHECKED){ 
 total = total + 250;
 }
		else
		{ 
	 total = total - 250; 
		}
 sprintf (buffer,"%.2f",total);
 SetWindowText(label5,buffer);break; 
 case check_4:
		 if(SendMessage(check4,BM_GETCHECK,0,0) == BST_CHECKED){ 
 total = total + 122;
 }
		else
		{ 
	 total = total - 122; 
		}
 sprintf (buffer,"%.2f",total);
 SetWindowText(label5,buffer); 
 break; 
 } 
 break;
 default: return DefWindowProc(window,msg,wParam,lParam);
}
return 0;
}

Mais conteúdos dessa disciplina