블로그는 나의 힘!
[ Programing ]/API2010. 2. 4. 02:45

// <<< 비트맵 출력 >>>



void DrawBitmap(HINSTANCE hInst, HDC hdc)
{

    // LoadImage() 함수는 아이콘, 비트맵, 커서등을 읽어들일수 있다.
    // LoadBitmap()은 비트맵 리소스만 읽어들인다.

    HBITMAP hbm = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));

    // DC 객체를 새로 생성하는 함수 CreateCompatibleDC()
    // 어떤 DC를 생성하느냐? 
    // => 인자로 주어진 hdc와 픽셀 포맷이 같은 DC를 생성

    HDC MemDC = CreateCompatibleDC(hdc);

    // SelectObject() 함수는 지정해준 DC가 어떤 객체를 관리할 수
    // 있도록 연결해준다.
    // -> MemDC 가 객체 hbm 을 관리할수 있도록 연결해준다.
    // => 즉 SelectObject() 함수는 어떤 DC가 관리할 수 있는 모든 객체와
    // 해당 DC를 연결해주는 역할을 한다.
    // 여기서 말하는 객체란 DC가 관리할 수 있는 모든 형태.... ( Pen, Brush, Bitmap ... )
    // 그런데 만약 MemDC가 이전에 이미 관리하던 객체가 있다면...?
    // 원래 객체를 잃어버리지 않도록 임시로 받아둔다. (holdbm)
    // 받아둔 원 객체는 나중에 다시 연결해준다. (복구)

    HBITMAP holdbm = (HBITMAP)SelectObject(MemDC, hbm);

    //이미지 사이즈 정보 구하기
    BITMAP bm;
    GetObject(hbm, sizeof(BITMAP), &bm);


    // 화면에 뿌려주는 함수
    // MemDC 가 화면에 뿌려질 이미지 데이터를 관리하고 있으므로
    // 화면 픽셀에 뿌려줄 데이터를 MemDC로부터 전달받는다.
    // 여기서 화면이라는 객체를 관리하는 것 -> hdc

    BitBlt( hdc, 0,0, bm.bmWidth,bm.bmHeight, MemDC, 0,0, SRCCOPY);

    // 다 그렸으면 MemDC 를 원래 상태로 복구한다.
    SelectObject(MemDC, holdbm);

    // 비트맵 이미지 해제
    DeleteObject(hbm);

    // 생성할때 바로 해제부터 해준다. (습관)
    DeleteDC( MemDC);
}

Posted by Mister_Q