Continuando, esse já é o terceiro post sobre janelas com win32, espero por enquanto me atentar a mais um post, então vou comentar o máximo sobre o código do programa e começar a meter a mão na massa em relação ao aprendizado da programação em C/C++. Beleza! Vamos ao código.
C++ Com vanderels
terça-feira, 24 de maio de 2016
terça-feira, 1 de dezembro de 2015
C/C++ primeiro programa
Bom, nas minhas pesquisas achei na internet alguns arquivos sobre janela, utilizando win32 e a GDI do windows, vou postar um, o código.
Para ver o resultado é necessário um copilador para gerar os executável do nosso programa.
Eu uso o dev-C++ e o codeblock, são gratuitos e bons.
//-------------------
//programa 0.1
// autor Vanderson A de Souza
//Data 13/01/2016
//--------------------
//Bibliotecas
#include <windows.h>
//Definições
#define WINDOW_CLASS "PrimeiraJanela"
#define WINDOW_TITLE "Prog 01"
#define WINDOW_WIDTH 500
#define WINDOW_HEIGHT 450
// Prototipo da função que trata as mensagens do Windows
LRESULT CALLBACK WndProc(HWND , UINT , WPARAM , LPARAM );
//Função principal (WinMain)
int WINAPI WinMain
(HINSTANCE hInstance,// indentificador para atual instancia do programa, estado atual do programa
HINSTANCE hPreveInstance,//indentificador para estado anterior do programa(é NULL)
LPSTR lpsCmdLine,//é um ponteiro para linha de comando do programa(carregado como uma imensa string cada linha de codigo)
int nCmdShow//seta como a janela deve aparecer, modo de visualização
)
{
HWND hWnd = NULL;
MSG msg;
//Classe da janela(struct)
WNDCLASSEX vas;
vas.cbSize = sizeof (WNDCLASSEX);
vas.style = CS_HREDRAW|CS_VREDRAW;
vas.lpfnWndProc = (WNDPROC)WndProc;
vas.cbClsExtra = 0;
vas.cbWndExtra = 0;
vas.hInstance = hInstance;
vas.hIcon =LoadIcon(NULL, IDI_APPLICATION);
vas.hCursor =LoadCursor(NULL, IDC_ARROW);
vas.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
vas.lpszMenuName = NULL;
vas.lpszClassName = WINDOW_CLASS;
vas.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
//Resgistrando a classe
if (!RegisterClassEx(&vas))
return 0;
//Criando a janela
hWnd = CreateWindowEx(
0,
WINDOW_CLASS,
WINDOW_TITLE,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
WINDOW_WIDTH,
WINDOW_HEIGHT,
HWND_DESKTOP,
NULL,
hInstance,
NULL
);
ShowWindow (hWnd, nCmdShow);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hDC = NULL;
PAINTSTRUCT psPaint;
switch (msg)
{
case WM_CREATE:
{
return(0);
} break;
case WM_PAINT:
{
hDC = BeginPaint(hWnd, &psPaint);
EndPaint(hWnd, &psPaint);
return(0);
} break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hWnd, msg, wParam, lParam);
}
return 0;
}
//--------------------------------------------------------------------------
// WindowProc() -> Processa as mensagens enviadas para o programa
//--------------------------------------------------------------------------
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// Variáveis para manipulação da parte gráfica do programa
HDC hDC = NULL;
PAINTSTRUCT psPaint;
// Verifica qual foi a mensagem enviada
switch(uMsg)
{
case WM_CREATE: // Janela foi criada
{
// Retorna 0, significando que a mensagem foi processada corretamente
return(0);
} break;
case WM_PAINT: // Janela (ou parte dela) precisa ser atualizada
{
/* Devemos avisar manualmente ao Windows que a janela já foi atualizada, pois não é um processo automático. Se isso não for feito, o Windows não irá parar de enviar a mensagem WM_PAINT ao programa. */
// O código abaixo avisa o Windows que a janela já foi atualizada.
hDC = BeginPaint(hWnd, &psPaint);
EndPaint(hWnd, &psPaint);
return(0);
} break;
case WM_CLOSE: // Janela foi fechada
{
// Destrói a janela
DestroyWindow(hWnd);
return(0);
} break;
case WM_DESTROY: // Janela foi destruída
{
// Envia mensagem WM_QUIT para o loop de mensagens
PostQuitMessage(0);
return(0);
} break;
default: // Outra mensagem
{
/* Deixa o Windows processar as mensagens que não foram verificadas na função */
return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}
}
}
Aqui nesse código criar uma janela com fundo Preto defenido pelo GetStockObject(BLACK_BRUSH).
Há sim, não tem como trabalhar com janela sem aprender "C", então vou aprender "C/C++" mais win32.
O próximo código vou fazer com que apareça os textos, assim quando gerar o código para aprendizagem em C/C++ não vai ser no prompt do DOS e sim na janela.
Então até o próximo post.
Att.:
Vanderson A. de Souza
Para ver o resultado é necessário um copilador para gerar os executável do nosso programa.
Eu uso o dev-C++ e o codeblock, são gratuitos e bons.
//-------------------
//programa 0.1
// autor Vanderson A de Souza
//Data 13/01/2016
//--------------------
//Bibliotecas
#include <windows.h>
//Definições
#define WINDOW_CLASS "PrimeiraJanela"
#define WINDOW_TITLE "Prog 01"
#define WINDOW_WIDTH 500
#define WINDOW_HEIGHT 450
// Prototipo da função que trata as mensagens do Windows
LRESULT CALLBACK WndProc(HWND , UINT , WPARAM , LPARAM );
//Função principal (WinMain)
int WINAPI WinMain
(HINSTANCE hInstance,// indentificador para atual instancia do programa, estado atual do programa
HINSTANCE hPreveInstance,//indentificador para estado anterior do programa(é NULL)
LPSTR lpsCmdLine,//é um ponteiro para linha de comando do programa(carregado como uma imensa string cada linha de codigo)
int nCmdShow//seta como a janela deve aparecer, modo de visualização
)
{
HWND hWnd = NULL;
MSG msg;
//Classe da janela(struct)
WNDCLASSEX vas;
vas.cbSize = sizeof (WNDCLASSEX);
vas.style = CS_HREDRAW|CS_VREDRAW;
vas.lpfnWndProc = (WNDPROC)WndProc;
vas.cbClsExtra = 0;
vas.cbWndExtra = 0;
vas.hInstance = hInstance;
vas.hIcon =LoadIcon(NULL, IDI_APPLICATION);
vas.hCursor =LoadCursor(NULL, IDC_ARROW);
vas.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
vas.lpszMenuName = NULL;
vas.lpszClassName = WINDOW_CLASS;
vas.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
//Resgistrando a classe
if (!RegisterClassEx(&vas))
return 0;
//Criando a janela
hWnd = CreateWindowEx(
0,
WINDOW_CLASS,
WINDOW_TITLE,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
WINDOW_WIDTH,
WINDOW_HEIGHT,
HWND_DESKTOP,
NULL,
hInstance,
NULL
);
ShowWindow (hWnd, nCmdShow);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hDC = NULL;
PAINTSTRUCT psPaint;
switch (msg)
{
case WM_CREATE:
{
return(0);
} break;
case WM_PAINT:
{
hDC = BeginPaint(hWnd, &psPaint);
EndPaint(hWnd, &psPaint);
return(0);
} break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hWnd, msg, wParam, lParam);
}
return 0;
}
//--------------------------------------------------------------------------
// WindowProc() -> Processa as mensagens enviadas para o programa
//--------------------------------------------------------------------------
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// Variáveis para manipulação da parte gráfica do programa
HDC hDC = NULL;
PAINTSTRUCT psPaint;
// Verifica qual foi a mensagem enviada
switch(uMsg)
{
case WM_CREATE: // Janela foi criada
{
// Retorna 0, significando que a mensagem foi processada corretamente
return(0);
} break;
case WM_PAINT: // Janela (ou parte dela) precisa ser atualizada
{
/* Devemos avisar manualmente ao Windows que a janela já foi atualizada, pois não é um processo automático. Se isso não for feito, o Windows não irá parar de enviar a mensagem WM_PAINT ao programa. */
// O código abaixo avisa o Windows que a janela já foi atualizada.
hDC = BeginPaint(hWnd, &psPaint);
EndPaint(hWnd, &psPaint);
return(0);
} break;
case WM_CLOSE: // Janela foi fechada
{
// Destrói a janela
DestroyWindow(hWnd);
return(0);
} break;
case WM_DESTROY: // Janela foi destruída
{
// Envia mensagem WM_QUIT para o loop de mensagens
PostQuitMessage(0);
return(0);
} break;
default: // Outra mensagem
{
/* Deixa o Windows processar as mensagens que não foram verificadas na função */
return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}
}
}
Aqui nesse código criar uma janela com fundo Preto defenido pelo GetStockObject(BLACK_BRUSH).
Há sim, não tem como trabalhar com janela sem aprender "C", então vou aprender "C/C++" mais win32.
O próximo código vou fazer com que apareça os textos, assim quando gerar o código para aprendizagem em C/C++ não vai ser no prompt do DOS e sim na janela.
Então até o próximo post.
Att.:
Vanderson A. de Souza
domingo, 29 de novembro de 2015
O começo
Olá! Estou começando a escrever este blog sobre programação em C++, ao mesmo tempo em que aprendo sobre a linguagem C++, com o objetivo de me estimular e compartilhar minha experiência com a linguagem, tem por alvo criar uma engine em opengl no final, vou tentar adaptar o estudo a uma ambiente de janela no Windows, serei superficial sobre o ambiente de janela, mas depois irei me aprofundando, vou postar os scripts de pois de testar, tentarei postar fotos e se possível vídeos, não é a primeira linguagem que aprendo.
Então mãos á obra!!!
Att.:
Vanderson A. de Souza
Então mãos á obra!!!
Att.:
Vanderson A. de Souza
Assinar:
Comentários (Atom)