1. 프로젝트유도
2. 비트맵에 배경그리기
* Resource Tab -> 프로젝트명에서 오른쪽 버튼 클릭 -> Insert -> Bitmap -> new버튼 클릭
글로 설명한 것들은 아래 그림과 같다.



*위의 과정의 하게되면 무슨 바둑판 같은 것이 나오게 된다. 그 바둑판같은 네모난 것은 안쪽에서는 포인터가 펜이나 아니면 드럼통같은 것인데 맨바깥부분으로 가면 그게 화살표로 바뀌는 부분이 있다. 그때 그 네모난 것을 더블클릭한다. (Bitmap Properties 나오게 하려고 하는 과정이다.)
그럼 아래과 같은 창이 나오는데 ID와 Width, 그리고 Height를 아래와 같이 설정해 준다.




네모난거 오른쪽 도구상자에서 페인트통 같은걸 선택해 주고 배경색을 빨간 색으로 준다. (그림판과 사용방법이 비슷함)
* 비트맵 2개더 추가(과정은 위와 동일함)
ID : IDB_BITMAPCar Width : 50 Height : 50
ID : IDB_BITMAPMonster Width : 50 Height : 50
처음에 비트맵은 자동차 그림을 그려주고 두 번째 비트맵은 괴물 그림을 그려준다.




3. Class View로 간다.

CDC m_BackDC; // back
CBitmap m_BackBit;

CDC m_CarDC; // car
CBitmap m_carBit;

CDC m_CarDC; // Mem
CBitmap m_MemBit;


4. [WM_CREATE]

int CA520View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
CClientDC dc(this);

// 물리적 메모리 준비
m_MemDC.CreateCompatibleDC(&dc);
m_MemBit.CreateCompatibleBitmap(&dc, 500, 500);
m_MemDC.SelectObject(&m_MemBit);

// 배경준비
m_BackDC.CreateCompatibleDC(&dc);
m_BackBit.LoadBitmap(IDB_BITMAPBack);
m_BackDC.SelectObject(&m_BackBit);

// Car 준비
m_CarDC.CreateCompatibleDC(&dc);
m_CarBit.LoadBitmap(IDB_BITMAPCar);
m_CarDC.SelectObject(&m_CarBit);

// 몬스터 준비
m_MonDC.CreateCompatibleDC(&dc);
m_MonBit.LoadBitmap(IDB_BITMAPMonster);
m_MonDC.SelectObject(&m_MonBit);


m_CarPos = CPoint(100, 100);

m_MemDC.BitBlt(0, 0, 500, 500, &m_BackDC, 0, 0, SRCCOPY);
m_MemDC.BitBlt(200, 200, 50, 50, &m_MonDC, 0, 0, SRCCOPY); // 몬스터
m_MemDC.BitBlt(m_CarPos.x, m_CarPos.y, 50, 50, &m_CarDC, 0, 0, SRCCOPY);

return 0;
}


5. [OnDraw]

void CA520View::OnDraw(CDC* pDC)
{
CA520Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->BitBlt(0, 0, 500, 500, &m_MemDC, 0, 0, SRCCOPY);
}


6. [WM_KEYDOWN]

void CA520View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
switch (nChar)
{
case VK_LEFT:
m_CarPos.x -= 10;
if(TRUE==uIsColl())
{
m_CarPos.x += 20;
}
break;
case VK_RIGHT:
m_CarPos.x += 10;
if(TRUE==uIsColl())
{
m_CarPos.x -= 20;
}
break;
case VK_UP:
m_CarPos.y -= 10;
if(TRUE==uIsColl())
{
m_CarPos.y += 20;
}
break;
case VK_DOWN:
m_CarPos.y += 10;
if(TRUE==uIsColl())
{
m_CarPos.y -= 20;
}
break;
default:
break;
}

m_MemDC.BitBlt(0, 0, 500, 500, &m_BackDC, 0, 0, SRCCOPY);
m_MemDC.BitBlt(200, 200, 50, 50, &m_MonDC, 0, 0, SRCCOPY); // 몬스터
m_MemDC.BitBlt(m_CarPos.x, m_CarPos.y, 50, 50, &m_CarDC, 0, 0, SRCCOPY);

m_MemDC.MoveTo(0,0); // Line
m_MemDC.LineTo(m_CarPos);

m_MemDC.TextOut(100, 100, "Press any key"); // Text



CRect rc(0, 0, 500, 500);
InvalidateRect(&rc, FALSE);


CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
Posted by 장안동베짱e :