

// 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 "EXEMPLO3"

// 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
POINT		    point;


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

        EndPaint(hwnd,&ps);

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


    case WM_MOUSEMOVE:
		{

		if(wparam & MK_LBUTTON)  { // se o botao esquerdo for precionado	

			point.x = GET_X_LPARAM(lparam); 
			point.y = GET_Y_LPARAM(lparam);
			//Pega o DC
			hdc=GetDC(hwnd);
	
			SetPixelV(hdc,point.x,point.y,RGB(0,0,0));	
			
		
			ReleaseDC(hwnd,hdc);

	

		}
		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 3", // 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);

} 

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

