#include <Windows.h>
LRESULT CALLBACK Wndproc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT(\"공부다\");
void gamestart(WPARAM wParam,HWND hWnd);

void draw_bitmap(HDC hdc,int x,int y,HBITMAP hBit)
{
    HDC MemDC;
    int bx,by;
    BITMAP bit;

    MemDC=CreateCompatibleDC(hdc);
    SelectObject(MemDC, hBit);

    GetObject(hBit,sizeof(BITMAP),&bit);
    bx=bit.bmWidth;
    by=bit.bmHeight;

    BitBlt(hdc,x,y,bx,by,MemDC,0,0,SRCCOPY);

    SelectObject(MemDC, hBit);
    DeleteDC(MemDC);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance
                   ,LPSTR lpszCmdParam, int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_hInst=hInstance;

    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=(WNDPROC)Wndproc;
    WndClass.lpszClassName=lpszClass;
    WndClass.lpszMenuName=NULL;
    WndClass.style=CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&WndClass);

    hWnd=CreateWindow( lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 612,
        618, NULL, NULL, hInstance, NULL );
    ShowWindow(hWnd,nCmdShow);
    hWndMain=hWnd;


    while(GetMessage(&Message,NULL,0,0))
    {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return Message.wParam;
}

HBITMAP fuck,suck,hBit;
int nX=0,nY=0;
LRESULT CALLBACK Wndproc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{

    HDC hdc,hMemDC;

    PAINTSTRUCT ps;

    BITMAP bit;
    RECT crt;

    switch(iMessage)
    {
    case WM_CREATE:
        fuck=LoadBitmap(g_hInst,\"fu\");
        suck=LoadBitmap(g_hInst,\"su\");
        SetTimer(hWnd,1,25,NULL);
        return 0;
    case WM_TIMER:
        gamestart(wParam,hWnd);

        return 0;

    case WM_PAINT:
        hdc=::BeginPaint(hWnd,&ps);

        hdc=GetDC(hWnd);
        
        hMemDC=::CreateCompatibleDC(hdc);
    
        SelectObject(hMemDC,hBit);
        BitBlt(hdc,0,0,600,600,hMemDC,0,0,SRCCOPY);

        DeleteDC(hMemDC);
        ReleaseDC(hWnd,hdc);

        EndPaint(hWnd,&ps);
        return FALSE;

    case WM_DESTROY:

        PostQuitMessage(0);
        return 0;

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

void gamestart(WPARAM wParam,HWND hWnd)
{    

    RECT crt;
    HDC hDC,hMemDC;
    GetClientRect(hWndMain,&crt);
    hDC=GetDC(hWndMain);

    if(hBit==NULL)
    {
        hBit=CreateCompatibleBitmap(hDC,crt.right,crt.bottom);
    }
    hMemDC=::CreateCompatibleDC(hDC);

    draw_bitmap(hDC,0,0,suck);
    draw_bitmap(hDC,nX,nY,fuck);


    if(::GetAsyncKeyState(VK_UP))
    {
        nY=nY-3;
    }
    if(::GetAsyncKeyState(VK_DOWN))
    {
        nY=nY+3;
    }
    if(::GetAsyncKeyState(VK_LEFT))
    {
        nX=nX-3;
    }
    if(::GetAsyncKeyState(VK_RIGHT))
    {
        nX=nX+3;
    }

    ReleaseDC(hWndMain,hDC);
    UpdateWindow(hWnd);
    InvalidateRect(hWndMain,NULL,FALSE);
}


선배가 이미지띄우기 공부하실때 쓰시던 소스수정해서 더블버퍼링만 추가해보려하는데 힘드네

어느정도만 잡아주시고 혼자 파보라고 하시는데 C배우면서 API는 속성으로 배우는거라 이해를 아직 잘못하겠음

그래도 해보려고 하는데 조금만 설명해줄놈있나요

그림은 suck이 배경이고 fuck이 움직이는 그림