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