

// INCLUDES ///////////////////////////////////////////////
#define WIN32_LEAN_AND_MEAN  // no para o MFC

#include <windows.h>   // todos os headers do windows
#include <windowsx.h>  // algumas macros


// DEFINES ////////////////////////////////////////////////

// Nome da classe 
#define WINDOW_CLASS_NAME "EXEMPLO1"

// GLOBALS ////////////////////////////////////////////////


// FUNCTIONS //////////////////////////////////////////////
LRESULT CALLBACK MyWindowProc(HWND hwnd, 
						    UINT msg, 
                            WPARAM wparam, 
                            LPARAM lparam)
{

PAINTSTRUCT		ps;		// usado em  WM_PAINT
HDC				hdc;	// apontador para um  device context

 
switch(msg)
	{	
	case WM_CREATE: 
        {
		// cdigo de inicializacao do programa

        // returna OK
		return(0);
		} break;

	case WM_PAINT: 
		{
		//  valida a janela
		hdc = BeginPaint(hwnd,&ps);	 
		// o codigo grafico vem aqui

		TextOut(hdc, 150, 150, "Ol, Windows!", 13);

        EndPaint(hwnd,&ps);

        // returna OK
		return(0);
   		} break;

	case WM_DESTROY: 
		{
		// mata a aplicacao, manda a mensagem WM_QUIT para a pilha 
		PostQuitMessage(0);

        // returna OK
		return(0);
		} break;

	default:break;

    } // end switch

// processa o resto das mensagens 
return (DefWindowProc(hwnd, msg, wparam, lparam));

} 

// WINMAIN ////////////////////////////////////////////////
int WINAPI WinMain(	HINSTANCE hinstance,
					HINSTANCE hprevinstance,
					LPSTR lpcmdline,
					int ncmdshow)
{

WNDCLASSEX winclass; 
HWND	   hwnd;	 // apontador da janela
MSG		   msg;		 // mensagem generica


// Tamanho da estrutura
winclass.cbSize=sizeof(WNDCLASSEX);

// Estilo
winclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;

// Ponteiro para a winproc
winclass.lpfnWndProc=MyWindowProc;

// Projetado para informar ao windows do espao extra que a
// estrutura deveria guardar para informaes em tempo de execuo.
// Na prtica, atribua 0 (zero);
winclass.cbClsExtra=0;
winclass.cbWndExtra=0;

// Ponteiro para a aplicao (que recebemos do winmain). 
winclass.hInstance = hinstance;

//Carrega o icone da janela (normal e pequeno)
winclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
winclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);

//Carrega o Cursor default da janela 
winclass.hCursor = LoadCursor(NULL,IDC_ARROW);

//Mostra ao windows como pintar o background
winclass.hbrBackground =  (HBRUSH) GetStockObject(WHITE_BRUSH);

//Nome do menu que a janela deve carregar dos recursos da aplicao
winclass.lpszMenuName=NULL;

//Nome atribuido a esta classe de janela
winclass.lpszClassName=WINDOW_CLASS_NAME;


// Registra a classe definida
if (!RegisterClassEx(&winclass))
	return(0);

// Cria a janela
if (!(hwnd = CreateWindowEx(NULL, // extended style
                            WINDOW_CLASS_NAME,   // class
						    "Exemplo 1", // title
						    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
					 	    0,0,	    // initial x,y
						    400,400,  // initial width, height
						    NULL,	    // handle to parent 
						    NULL,	    // handle to menu
						    hinstance,// instance of this application
						    NULL)))	// extra creation parms
return(0);

//  loop principal
while(GetMessage(&msg,NULL,0,0)) //sai do loop quando WM_QUIT eh a mensagem; bloqueia se nao houver mensagem
 	 { 
	 // Traduz uma mensagem WM_KEYDOWN para WM_CHAR
	 TranslateMessage(&msg);

	 // Manda para winproc
	 DispatchMessage(&msg);
	 } 

return(msg.wParam);

} 

///////////////////////////////////////////////////////////

