C++源代码游戏编程--WinMain()函数交流
//******************************************************************
//函数:WinMain()
//功能:应用程序入口
//******************************************************************
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
hInst=hInstance;
//初始化主窗口
if (!InitWindow( hInstance, nCmdShow))
return FALSE;
//初始化DirectDraw环境
if (!InitDDraw())
{
MessageBox(hWndMain, "初始化DirectDraw过程中出错!", "Error", MB_OK);
FreeObjects();
DestroyWindow(hWndMain);
return FALSE;
}
//进入消息循环
while(1)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(bActive)
{
UpdateFrame();
}
else WaitMessage();
}
return msg.wParam;
}
///////////////////////////////////////////////
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Initialization, message loop
//-----------------------------------------------------------------------------
int PASCAL
WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if (InitApp(hInstance, nCmdShow) != DD_OK)
return FALSE;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
/////////////////////////////////////////////////////////////////////////////////////////////
// 主循环
/////////////////////////////////////////////////////////////////////////////////////////////
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if(!InitApp(hInst, nCmdShow)) return FALSE;
while(1)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(bActive)
{
Update();
// 翻转上一层缓冲区内容到屏幕。
Screen-Flip();
}
else WaitMessage();
}
}
////////////////////////////////////////////////
///////////////////////////////////////////////////
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
// any windows programmer should be familiar with this
MSG msg;
lpCmdLine = lpCmdLine;
hPrevInstance = hPrevInstance;
if(!doInit(hInstance, nCmdShow))
{
return FALSE;
}
while (1)
{
if(PeekMessage(&msg, NULL, 0,0,PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL,0,0))
return msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(bActive)
{
fire(480, 0, 600, 50);
// draw fire on bottom row and then flip
while(1)
{
ddrval = lpDDSPrimary-Flip(NULL, DDFLIP_WAIT);
if(ddrval == DD_OK)
{
break;
}
if(ddrval == DDERR_SURFACELOST)
{
if(ddrval != DD_OK)
{
break;
}
}
if(ddrval != DDERR_WASSTILLDRAWING)
{
break;
}
}
} // if bActive
else
{
//make sure we go to sleep if have nothiing to do
WaitMessage();
}
}
} // win main
//////////////////////////////////////////////
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: 入口,初始化,进行消息循环
//-----------------------------------------------------------------------------
int PASCAL
WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if (InitApp(hInstance, nCmdShow) != DD_OK)
return FALSE;
Map[0].Width=width;
Map[0].Hight=height;
Map[0].Data=(char *)malloc( Map[0].Width * Map[0].Hight );
Map[0].Pro=(char *)malloc( Map[0].Width * Map[0].Hight );
//将地图全部置为可到达
int i,j;
reachable=1;
for (j=0;j
for (i=0;i
{
*(Map[0].Data+i*Map[0].Hight+j)=reachable;
}
for (j=0;j
for (i=0;i
{
*(Map[0].Pro+i*Map[0].Hight+j)=select_pro;
}
//消息循环
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Entry point to the program. Initializes everything and calls
// UpdateFrame() when idle from the message pump.
//-----------------------------------------------------------------------------
int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow )
{
MSG msg;
HWND hWnd;
ZeroMemory( &g_Sprite, sizeof(SPRITE_STRUCT) * NUM_SPRITES );
srand( GetTickCount() );
if( FAILED( WinInit( hInst, nCmdShow, &hWnd ) ) )
return FALSE;
// Make a timer go off to re-init the table of random values every once in a while
SetTimer( hWnd, 0, 1500, NULL );
if( FAILED( InitDirectDraw( hWnd ) ) )
{
if( g_pDisplay )
g_pDisplay-GetDirectDraw()-SetCooperativeLevel( NULL, DDSCL_NORMAL );
MessageBox( hWnd, TEXT("DirectDraw init failed. ")
TEXT("The sample will now exit. "), TEXT("DirectDraw Sample"),
MB_ICONERROR | MB_OK );
return FALSE;
}
g_dwLastTick = timeGetTime();
while( TRUE )
{
// Look for messages, if none are found then
// update the state and display it
if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
{
if( 0 == GetMessage(&msg, NULL, 0, 0 ) )
{
// WM_QUIT was posted, so exit
return (int)msg.wParam;
}
// Translate and dispatch the message
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
if( g_bActive )
{
// Move the sprites, blt them to the back buffer, then
// flip or blt the back buffer to the primary buffer
if( FAILED( ProcessNextFrame() ) )
{
SAFE_DELETE( g_pDisplay );
MessageBox( hWnd, TEXT("Displaying the next frame failed. ")
TEXT("The sample will now exit. "), TEXT("DirectDraw Sample"),
MB_ICONERROR | MB_OK );
return FALSE;
}
}
else
{
// Make sure we go to sleep if we have nothing else to do
WaitMessage();
// Ignore time spent inactive
g_dwLastTick = timeGetTime();
}
}
}
}