프로그래밍 관련/Win API

WIndows API - #9-3 그래픽 처리 - (비트맵 출력) (1)

QA Engineer - P군 2015. 9. 6. 21:54
반응형

윈도에 비트맵을 띄워봅시다!

게임을 만들거나 또는 어떠한 프로그램을 만들때 비트맵은 아주 중요한 리소스 입니다.

게임에서는 캐릭터, 배경 등등 거의 모든것을... 프로그래밍에서는 보다 멋진 인터페이스를 제공할 수도 있을 것 입니다.

 

아무튼 이제 이미지를 출력해보도록 하겠습니다.

먼저 리소스에 비트맵을 추가합니다.

 

비트맵 추가하는 법


1. 리소스 파일 -> 추가 -> 리소스를 클릭합니다.

 

 

2. 리소스 추가 항목에서 Bitmap을 클릭하고 가져오기를 누릅니다.

(새로 만드셔도 됩니다만..그럴 분은 없겠죠?)

 

 

정상적으로 리소스를 추가하셨다면, "resource.h" 해더 파일과 비트맵이 추가되어 있습니다.
그 다음 아래와 같은 코드를 입력하시면 됩니다.

#include "resource.h"
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{


 HDC hdc,MemDC;
 PAINTSTRUCT ps;
 HBITMAP MyBitmap , OldBitmap; 


 switch (iMessage)
 { 


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


 MemDC=CreateCompatibleDC(hdc);
 MyBitmap = LoadBitmap(_hInstance , MAKEINTRESOURCE(MUZI2));
 OldBitmap=(HBITMAP)SelectObject(MemDC, MyBitmap);
 BitBlt (hdc , 0 , 0 , 192 , 192 , MemDC , 0 , 0 , SRCCOPY);
 SelectObject(MemDC , OldBitmap);
 DeleteObject(MyBitmap);
 DeleteDC(MemDC);


 EndPaint(hWnd , &ps);
 break;
 }


 case WM_DESTROY:


 PostQuitMessage(0);
 break;
 }


 return (DefWindowProc(hWnd, iMessage, wParam, lParam));

}

다음과 같이 비트맵 출력 부분만 다른 함수로 분리한 후에 해당 함수를 호출하여도 비트맵이 출력됩니다.
가능하면 윈도우가 초기화 되는 WM_CREATE에서 비트맵은 초기화 되어야 하며 , WM_DESTROY에서 해제하는 것이 좋습니다.

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


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


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


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


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




#include "resource.h"
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{


 HDC hdc;
 PAINTSTRUCT ps;
 static HBITMAP MyBitmap; 


 switch (iMessage)
 { 
 case WM_CREATE:
 {
 MyBitmap = LoadBitmap(_hInstance , MAKEINTRESOURCE(MUZI2));
 break;
 }
 case WM_PAINT: 
 {
 hdc = BeginPaint(hWnd, &ps);


 DrawBitmap( hdc , 0 , 0 , MyBitmap); 


 EndPaint(hWnd , &ps);
 break;
 }


 case WM_DESTROY:
 DeleteObject(MyBitmap);
 PostQuitMessage(0);
 break;
 }


 return (DefWindowProc(hWnd, iMessage, wParam, lParam));


}

 

// 결과

깜찍한 무지를 윈도우에서 볼 수 있습니다.

일단 기본 비트맵을 띄워 봣으니 다음에는 해당 비트맵 출력을 자세히 살펴보겠습니다.

 

 

반응형