본문 바로가기
책갈피

약간 어렵구나...

김주환 |2007.11.24 12:19
조회 147 |추천 3

API로 제작된 소스 처음으로 공개합니다.

내 레이싱 게임 제작도중 정지된거...

그래픽디자이너가없어 혼자 애쓰다가...ㅈㅈ쳤죠

 

 

#include <windows.h>
#include "resource.h"
#pragma comment ( lib, "winmm" )
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("Game1"); //프로그램의 타이틀이자 프로그램클래스

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevinstance,LPSTR lpszCmdParam,int nCmdShow)
{
HACCEL hAccel;
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;

WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
WndClass.hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));
WndClass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1);
WndClass.style=CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
RegisterClass(&WndClass);

hWnd=CreateWindow(lpszClass,lpszClass,WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU,
      CW_USEDEFAULT,CW_USEDEFAULT,800,600,
      NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hAccel=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));
while(GetMessage(&Message,NULL,0,0)){
 if(!TranslateAccelerator(hWnd,hAccel,&Message)){
 TranslateMessage(&Message);
 DispatchMessage(&Message);
}
}
return Message.wParam;
}

BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
 switch(iMessage){
 case WM_INITDIALOG:
  return TRUE;
 case WM_COMMAND:
  switch(LOWORD(wParam)){
  case IDOK:
   EndDialog(hDlg,IDOK);
   return TRUE;
  }
  break;
 }
 return FALSE;
}
//이위에는 게임설명방법이있는 다이어로그를 호출 건들지말것
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{  
  static int intro=0,start,End;
  static HBRUSH BACKGROUND;
  HDC hdc,MemDC;
  PAINTSTRUCT ps;
  HBITMAP MyBitmap,OldBitmap;

  switch(iMessage)
  {
  case WM_CREATE:
  SetTimer(hWnd,1,100,NULL); //로고를 출력하기위해 Timer case1을 소환하여 화면 초기화
  BACKGROUND=CreateSolidBrush(RGB(255,255,255)); //백그라운드 흰색으로바꾸기위한 색지정
  case WM_PAINT:

  /*초기 피크로마 포트폴리오 로고 출력하는 Paint*/
  if(intro==0 && End==0){
  hdc=BeginPaint(hWnd,&ps);
  MemDC=CreateCompatibleDC(hdc);
  if(start>-21 && start<=-1){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP7)); start++; if(start==-1){start=0;}}
  else if(start==0){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP2)); start=1; }
  else if(start==1){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP3)); start=2; }
  else if(start==2){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP4)); start=3; }
  else if(start==3){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP5)); start=4; }
  else if(start==4){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP6)); start=5; }
  else if(start>4 && start<=49){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP1)); start++; if(start==49){start=50;}}
  else if(start==50){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP6)); start=51; }
  else if(start==51){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP5)); start=52; }
  else if(start==52){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP4)); start=53; }
  else if(start==53){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP3)); start=54; }
  else if(start>53 && start<=100){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP2)); start=101; }
  else if(start>100 && start<=130){ MyBitmap=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP7)); start++; }
  if(start==130){ /*SetClassLongPtr(hWnd,GCLP_HBRBACKGROUND, (LONG_PTR)BACKGROUND);*/ KillTimer(hWnd,1); End=1; SetTimer(hWnd,2,1000,NULL); InvalidateRect(hWnd,NULL,TRUE);} //완료우 타이머제거와 배경복구!!!
  OldBitmap=(HBITMAP)SelectObject(MemDC,MyBitmap);
  BitBlt(hdc,250,200,252,92,MemDC,0,0,SRCCOPY);
  SelectObject(MemDC,OldBitmap);
  EndPaint(hWnd,&ps);
  DeleteObject(MyBitmap);
  DeleteDC(MemDC);
  }
  /*타이머에의해 무한 InvalidateRect출력으로 초기화로인해 연속비트맵읽기출력,
  전부 완료로 Start카운터후에는 KillTImer로 화면초기화함수제거완료후 변수 END를 1로 초기화 그리고 타이머2호출*/
  return 0;

 

  case WM_TIMER:
   switch(wParam){
   case 1: //타이머1 로딩할때 불러오는 화면초기화!!
   InvalidateRect(hWnd,NULL,FALSE);
   return 0;
   case 2: //로딩완료후 나타날 페이지 생성
   return 0;
   }
  return 0;


  //이아래는 건들지말것,게임방법과 사이트홍보, 게임종료에 관한설정,비트맵사용후에는 즉석제거 혹은 Destroy에서 제거할것!!
  case WM_COMMAND:
   switch(LOWORD(wParam)){
   case ID_MENUITEM40003:
    if(MessageBox(hWnd,TEXT("종료하시겠습니까?"),TEXT("종료알림창"),MB_YESNO)==IDYES)
    {
     DestroyWindow(hWnd);
     break;
    } else { break; }
   case ID_MENUITEM40001:
    if(MessageBox(hWnd,TEXT("게임설명을 보시겠습니까?"),TEXT("게임방법창"),MB_YESNO|MB_ICONINFORMATION)==IDYES)
    { DialogBox(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,AboutDlgProc);
    return 0;}
    else{ break; }
   case ID_MENUITEM40004:
    MessageBox(hWnd,TEXT("htt://kasthe.oranc.co.kr"),TEXT("포트폴리오"),MB_OK);
     break;
   case ID_MENUITEM40005:
    MessageBox(hWnd,TEXT("http://cyworld.nate.com/01096150517"),TEXT("미니홈"),MB_OK);
     break;
   case ID_MENUITEM40006:
    MessageBox(hWnd,TEXT("버디:베너광고/MSN&네이트온:ncmreader@empal.com"),TEXT("메신저"),MB_OK);
     break;
   }
  return 0;
  case WM_DESTROY:
   MessageBox(hWnd,TEXT("게임을 종료합니다."),TEXT("종료메시지 안내"),MB_OK|MB_ICONINFORMATION);
   PostQuitMessage(0);
   return 0;
  }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

추천수3
반대수0

공감많은 뉴스 시사

더보기

뉴스 플러스