Witam. Zacząłem ostatnio przygodę z winAPI i robię różne projekty jako formę ćwiczenia, np: bitmapa w oknie, tekst w oknie, próbowałem audio w oknie ale coś nie wyszło, fullscreen w opengl. Dziś zrobiłem przy pomocy googla fullscreena w winAPI oraz wstawiłem do niego bitmapę. Chciałbym aby ktoś sprawdził mi kod, czy w dobre miejsca i czy dobrze wstawiłem kod od bitmapy i fullscreena, prosiłbym o ewentualne poprawki oraz informację w poście że coś tam zmieniliście. To jedna sprawa, a druga to taka, że chciałbym tę bitmapę jako tło na cały ekran (fullscreen). Szukałem na google ale nie ma nic o powiększaniu rozmiaru bitmapy. Za pomoc będę bardzo wdzięczny.

#include <windows.h>

#pragma comment(lib, "libgdi32.a") 

static TCHAR lpszAppName[] = TEXT( "API Windows" );

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
    {
    case WM_CREATE:
    {
         break;
    }

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_KEYDOWN:
        switch (wParam)
        {
            case VK_ESCAPE:
                PostQuitMessage(0);
                break;
        }
        break;
        
    case WM_PAINT:
    {
         PAINTSTRUCT ps; // deklaracja struktury
         HDC hdc = BeginPaint (hWnd, &ps);
         
         HBITMAP hbmObraz;
         hbmObraz =( HBITMAP ) LoadImage( NULL, "s.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
         HDC hdcNowy = CreateCompatibleDC(NULL);
         SelectObject( hdcNowy, hbmObraz );
         
         BITMAP bmInfo;  
         GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
         //HDC hdc = GetDC( hWnd );
         BitBlt( hdc, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY );
         ReleaseDC( hWnd, hdc );
        
         EndPaint (hWnd, &ps); // zwalniamy hdc
    }
    break;

    default:
        return (DefWindowProc(hWnd, uMsg, wParam, lParam));
    }
    return(0L);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MSG   msg;
    WNDCLASS wndclass;
    HWND   hWnd;

    wndclass.style  = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = MainWndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance  = hInstance;
    wndclass.hIcon  = NULL;
    wndclass.hCursor  = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = lpszAppName;
    

    if(RegisterClass(&wndclass) == 0)
        return FALSE;
        
        
    int width = 0;
    int height = 0;
    
    RECT rect;
    GetWindowRect(GetDesktopWindow(), &rect);

    hWnd = CreateWindow(
        lpszAppName, lpszAppName,
        WS_POPUP | SW_SHOWMAXIMIZED,
        width, height, rect.right, rect.bottom,
        NULL, NULL, hInstance, NULL);

    if(hWnd == NULL)
        return FALSE;

        DEVMODE devmode;
        ZeroMemory(&devmode,sizeof(DEVMODE));
        devmode.dmSize=sizeof(DEVMODE);
        devmode.dmPelsWidth=rect.right;
        devmode.dmPelsHeight=rect.bottom;
        devmode.dmBitsPerPel=32;
        devmode.dmFields= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
        ChangeDisplaySettings(&devmode, CDS_FULLSCREEN);
                  
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        
        HBITMAP hbmObraz;
        hbmObraz =( HBITMAP ) LoadImage( NULL, "s.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
        HDC hdcNowy = CreateCompatibleDC(NULL);
        SelectObject( hdcNowy, hbmObraz );
         
        BITMAP bmInfo;  
        GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
        HDC hdc = GetDC( hWnd );
        BitBlt( hdc, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY );
        ReleaseDC( hWnd, hdc );
    }
    return msg.wParam;
}