#include <windows.h>
 
HBITMAP bitmapa; 
BITMAP info_bitmapy;
int pozycjaX=600;
int pozycjaY=-100;

/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
HDC hdc, hdcBitmapy; 
PAINTSTRUCT ps;
 
	switch(Message) {

  	case WM_PAINT: {
       hdc = BeginPaint(hwnd, &ps); 
       hdcBitmapy = CreateCompatibleDC(hdc);
       bitmapa = (HBITMAP)SelectObject(hdcBitmapy, bitmapa); 
       BitBlt(hdc, pozycjaX, pozycjaY, 100, 100, hdcBitmapy, pozycjaX, pozycjaY, SRCCOPY);
       bitmapa = (HBITMAP)SelectObject(hdcBitmapy, bitmapa);
       DeleteDC(hdcBitmapy);
       EndPaint(hwnd, &ps);
       break;
	}
 
 	case WM_COMMAND: {//obs-uga przycisku
		switch( wParam ) {
		case 101:
			pozycjaX=pozycjaX+100;
			if (pozycjaX==700) {
				pozycjaY+=100;
				pozycjaX=0;
			}
			RedrawWindow( hwnd, NULL, NULL, RDW_NOERASE | RDW_INVALIDATE | RDW_UPDATENOW );
			break;
		}
		break;
 	} 
		/* trap the WM_CLOSE (clicking X) message, and actually tell the window to close */
	case WM_CLOSE: {
		DestroyWindow(hwnd);
		break;
		}
		/* Upon destruction, tell the main thread to stop */
	case WM_DESTROY: {
			PostQuitMessage(0);
			break;
		}
	default:
		return DefWindowProc(hwnd, Message, wParam, lParam);
	}

	return 0;
}

/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	WNDCLASSEX wc; /* A properties struct of our window */
	HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
	MSG Msg; /* A temporary location for all messages */

	/* zero out the struct and set the stuff we want to modify */
	memset(&wc,0,sizeof(wc));
	wc.cbSize		 = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	 = WndProc; /* This is where we will send messages to */
	wc.hInstance	 = hInstance;
	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);
	
	/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "WindowClass";
	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION);

	if(!RegisterClassEx(&wc)) {
		MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, /* x */
		CW_USEDEFAULT, /* y */
		640, /* width */
		480, /* height */
		NULL,NULL,hInstance,NULL);

	bitmapa = (HBITMAP) LoadImage (0, "01.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    	if (bitmapa == 0)
    	{
       		MessageBox(0, "Nie mozna otworzyc bitmapy", "Bląd", MB_ICONERROR);
       		return 0; //zamkniecie programu w razie braku pliku
     	}
    	GetObject (bitmapa, sizeof(BITMAP), &info_bitmapy);

	if(hwnd == NULL) {
		MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	HWND hPrzycisk = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Przyciśnij", WS_CHILD | WS_VISIBLE, 
		440, 380, 150, 30, hwnd, (HMENU)101, hInstance, NULL );
 
 	while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
		TranslateMessage(&Msg); /* Translate keycodes to chars if present */
		DispatchMessage(&Msg); /* Send it to WndProc */
	}
	return Msg.wParam;
}
