#include <windows.h>

LPSTR NazwaKlasy = "KlasaOkna";

// obsługa zdarzeń, wywołana przes pętlę komunikatów
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
	case WM_COMMAND:  //obsługa przycisku
		MessageBox( hwnd, "Nacisnąłeś", "Obsługa przycisku", MB_ICONINFORMATION );
		break;
    case WM_CLOSE:  
        DestroyWindow( hwnd );
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
    default:   
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
    
    return 0;
}


// główna funkcja programu
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    WNDCLASSEX wc;	
    HWND hwnd;
	MSG Komunikat;

   // wypełnienie struktury okna
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszMenuName = NULL;
    wc.lpszClassName = NazwaKlasy;
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
    
    //rejestracja klasy okna
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Odmawia rejestracji okna!", "Problem...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
    // utworzenie okna
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Moje okno", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL );
    if( hwnd == NULL )
    {
        MessageBox( NULL, "Odmowa utworzenia okna!", "Błąd...", MB_ICONEXCLAMATION );
        return 1;
    }
    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );
    

	//	Tutaj znajduje się główna część programu,
	//	gdzie znajdują się wszystkie funkcje wejścia i przesyłane są do WinProc.
		
	HWND hPrzycisk = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Pierwszy przycisk", WS_CHILD | WS_VISIBLE, 240, 200, 150, 30, hwnd, NULL, hInstance, NULL );

    //pętla komunikatów
    while( GetMessage( &Komunikat, NULL, 0, 0 ) >0 )
    {
        TranslateMessage( &Komunikat ); 
        DispatchMessage( &Komunikat );   //przesłanie komunikatów do WinProc
    }
    return Komunikat.wParam;
}
