비행기를 마우스로 아래 위로 움직여 장애물을 피하는게임을 만들려고합니다.
오른쪽 버튼을 누루면 밑으로 내려가게 하려고합니다.
#include<Windows.h>
#include<WindowsX.h>
#include"resource1.h"
#define hWnd_x 640
#define hWnd_y 480
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("First");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevlnstance,LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra =0;
WndClass.cbWndExtra =0;
WndClass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor =LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance =hInstance;
WndClass.lpfnWndProc =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,
hWnd_x,hWnd_y,///////////////////////////////////////윈도우 창 크기
NULL,(HMENU)NULL, hInstance,NULL
);
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,NULL, 0,0)){
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)//페인트메세지 처리함수
{
HDC hdc,memDC;
PAINTSTRUCT ps;
HBITMAP hBmpBack,hBmpOldBack;
HBITMAP hBmpAir,hBmpOldAir;
HBITMAP hBmpMask,hBmpOldMask;
RECT rtWin;
//1.DC얻음(화면 DC)
hdc=BeginPaint(hWnd,&ps);
//2.메모리 DC를 생성 - 화면 DC와 호환이 되야함
memDC=CreateCompatibleDC(hdc);
//3. 비트맵 로드
hBmpBack=LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BACK));
hBmpMask=LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_MASK));
hBmpAir=LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_AIR));
//4.메모리 DC에 비트맵을 적용- 과거 비트맵 객체핸들 저장.
hBmpOldBack=(HBITMAP)SelectObject(memDC,hBmpBack);
//5. 메모리 DC->화면 DC(전송)
GetClientRect(hWnd,&rtWin);
BitBlt(hdc,rtWin.left,rtWin.bottom-160,rtWin.right,160,memDC,0,0,SRCCOPY);
//마스크
hBmpOldMask=(HBITMAP)SelectObject(memDC,hBmpMask);
BitBlt(hdc,xPos,yPos,121,37,memDC,0,0,SRCAND);
//비행기
hBmpOldAir=(HBITMAP)SelectObject(memDC,hBmpAir);
BitBlt(hdc,xPos,yPos,121,37,memDC,0,0,SRCPAINT);
//6. 메모리 DC복원
SelectObject(memDC,hBmpOldBack);
SelectObject(memDC,hBmpOldAir);
//7. 비트맵제거
DeleteObject(hBmpBack);
DeleteObject(hBmpAir);
//8.메모리 DC제거
DeleteDC(memDC);
//9.화면DC반환
EndPaint(hWnd,&ps);
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch(iMessage){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
return OnPaint(hWnd,wParam,lParam);
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}