From 9399ff24b3dd3b1fc74e63d017c18e1ba84dec9b Mon Sep 17 00:00:00 2001 From: Jan Bodnar Date: Wed, 16 Mar 2016 13:44:20 +0100 Subject: [PATCH] Create drawbitmap.c --- graphics/drawbitmap.c | 82 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 graphics/drawbitmap.c diff --git a/graphics/drawbitmap.c b/graphics/drawbitmap.c new file mode 100644 index 0000000..fa4f582 --- /dev/null +++ b/graphics/drawbitmap.c @@ -0,0 +1,82 @@ +#include + +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); + +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + PWSTR lpCmdLine, int nCmdShow) { + + MSG msg; + WNDCLASSW wc = {0}; + + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpszClassName = L"Draw Bitmap"; + wc.hInstance = hInstance; + wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); + wc.lpfnWndProc = WndProc; + wc.hCursor = LoadCursor(0, IDC_ARROW); + + RegisterClassW(&wc); + CreateWindowW(wc.lpszClassName, L"Draw Bitmap", + WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 100, 100, 280, 220, NULL, NULL, hInstance, NULL); + + while (GetMessage(&msg, NULL, 0, 0)) { + + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return (int) msg.wParam; +} + +LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, + WPARAM wParam, LPARAM lParam) { + + static HBITMAP hBitmap; + HDC hdc; + PAINTSTRUCT ps; + BITMAP bitmap; + HDC hdcMem; + HGDIOBJ oldBitmap; + + switch(msg) { + + case WM_CREATE: + + hBitmap = (HBITMAP) LoadImageW(NULL, L"C:\\prog\\slovakia.bmp", + IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); + + if (hBitmap == NULL) { + MessageBoxW(hwnd, L"Failed to load image", L"Error", MB_OK); + } + + break; + + case WM_PAINT: + + hdc = BeginPaint(hwnd, &ps); + + hdcMem = CreateCompatibleDC(hdc); + oldBitmap = SelectObject(hdcMem, hBitmap); + + GetObject(hBitmap, sizeof(bitmap), &bitmap); + BitBlt(hdc, 5, 5, bitmap.bmWidth, bitmap.bmHeight, + hdcMem, 0, 0, SRCCOPY); + + SelectObject(hdcMem, oldBitmap); + DeleteDC(hdcMem); + + EndPaint(hwnd, &ps); + + break; + + case WM_DESTROY: + + DeleteObject(hBitmap); + PostQuitMessage(0); + + return 0; + } + + return DefWindowProcW(hwnd, msg, wParam, lParam); +}