게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
win32 API 질문있습니다.
게시물ID : programmer_4312짧은주소 복사하기
작성자 : 귀하12
추천 : 0
조회수 : 723회
댓글수 : 3개
등록시간 : 2014/07/02 11:27:22
옵션
  • 베스트금지
  • 본인삭제금지
비행기를 마우스로 아래 위로 움직여 장애물을 피하는게임을 만들려고합니다.
SelectObject 인 비행기를 마우스 왼쪽버튼이 누루면 위로 계속 이동하고 
오른쪽 버튼을 누루면 밑으로 내려가게 하려고합니다.
(위로 넘어가지않고 아래로 넘어가지않고 화면안에서만 할수있게하려합니다.)

아직 개념이 잡히지 않아서 어떻게 해야할지모르겠습니다.도와주세요

#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));
}


페인트.png

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호