www.pudn.com > 林海血原源代码.zip > Menu.cpp


// Menu.cpp: implementation of the CMenu class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "Menu.h" 
#include "Audio.h" 
#include "math.h" 
#include "RasterText.h" 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CMenu::CMenu(float FOVangle) 
{ 
 
} 
 
CMenu::~CMenu() 
{ 
} 
//////////////////////////////////////////////////////// 
int CMenu::DoMenu(HWND hWnd,HDC hDC,bool IsMainMenu)			 
{ 
    if(IsMainMenu)m_iCurMenu=m_iOldMenu=0; 
	else m_iCurMenu=m_iOldMenu=1; 
    m_bExit=false; 
	GameReturn=1; 
	cSelect.Init(hWnd,2); 
	cBkg.Init(hWnd, 1); 
	cSelect.Create(1,"menu/1.wav",false); 
	cSelect.Create(0,"menu/0.wav",false); 
	cBkg.Create(0,"menu/piano.wav",false); 
    cBkg.Play(0,50); 
 
	ShowCursor(true); 
	glDisable(GL_DEPTH_TEST); 
 
	while(!m_bExit) 
	{ 
		switch(m_iCurMenu) 
		{ 
		case 0: DoMainMenu(hDC);break; 
//		case 1: DoSaveAndLoadMenu(hDC);break; 
		case 2: DoSinglePlayerMenu(hDC);break; 
		case 3: DoMultiPlayerMenu(hDC);break; 
		case 4: DoOptionMenu(hDC);break; 
		case 5: DoAboutMenu(hDC,true);break; 
		case 6: DoAboutMenu(hDC,false);break; 
		case 7: DoExitMenu();break; 
		case 8: DoNewGameMenu(hDC);break; 
		case 9: DoLoadGameMenu(hDC);break; 
//		case 10: DoSaveGameMenu(hDC);break; 
		} 
	} 
    glEnable(GL_DEPTH_TEST); 
	glDisable(GL_BLEND); 
	cSelect.Shutdown(); 
	cBkg.Shutdown(); 
	return GameReturn; 
} 
/////////////////////////////////////////////////////////// 
void CMenu::DoMainMenu(HDC hDC) 
{ 
	AUX_RGBImageRec * pMainMenu=NULL; 
	AUX_RGBImageRec * pItemDown=NULL; 
	AUX_RGBImageRec * pItemOn=NULL; 
 
	pMainMenu=auxDIBImageLoad("menu/mainmenu.bmp"); 
	pItemDown=auxDIBImageLoad("menu/down.bmp"); 
	pItemOn=auxDIBImageLoad("menu/on.bmp"); 
//	if(!LoadPicture("menu/mainmenu.bmp",pMainMenu))return; 
//	if(!LoadPicture("menu/down.bmp",pItemDown))return; 
//	if(!LoadPicture("menu/on.bmp",pItemOn))return; 
	int     curItem=-1; 
	int     oldItem=-1; 
	RECT    rectItem[6]; 
    for(int i=0;i<6;i++) 
	{ 
		rectItem[i].left=360; 
		rectItem[i].right=720; 
		rectItem[i].top=140+i*60; 
		rectItem[i].bottom=195+i*60; 
	} 
    bool done=true; 
    m_bLBtnDown=m_bLBtnUp=false; 
	//////////////////////// 
//	::ShowCursor(true); 
	MSG msg; 
 
  	while(done)									// Loop That Runs While done=FALSE 
	{ 
  
		if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))	// Is There A Message Waiting? 
		{ 
			if (msg.message==WM_QUIT)				// Have We Received A Quit Message? 
			{ 
				done=false;							// If So done=TRUE 
			} 
			else if(msg.message==WM_LBUTTONDOWN) 
			{ 
				m_bLBtnDown=true; 
				m_bLBtnUp=false; 
			} 
			else if(msg.message==WM_LBUTTONUP) 
			{ 
				m_bLBtnDown=false; 
				m_bLBtnUp=true; 
			} 
			else if(msg.message==WM_MOUSEMOVE) 
			{ 
				m_bLBtnUp=false; 
			} 
			else									// If Not, Deal With Window Messages 
			{ 
				TranslateMessage(&msg);				// Translate The Message 
				DispatchMessage(&msg);				// Dispatch The Message 
			} 
		} 
		else										// If There Are No Messages 
		{    
  
               glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色 
               glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
               glLoadIdentity(); 
               DrawPicture(0,600,pMainMenu); 
    glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR); 
//	glEnable(GL_BLEND); 
               GetCursorPos(&m_mpos); 
			   curItem=-1; 
			   for(int index=0;index<6;index++) 
			   { 
				   if(m_mpos.x>rectItem[index].left &&m_mpos.xrectItem[index].top && m_mpos.yrectItem[index].left &&m_mpos.xrectItem[index].top && m_mpos.yrectItem[index].left &&m_mpos.xrectItem[index].top && m_mpos.yrectItem[index].left &&m_mpos.xrectItem[index].top && m_mpos.yrectItem[index].left &&m_mpos.xrectItem[index].top && m_mpos.yrectItem[index].left &&m_mpos.xrectItem[index].top && m_mpos.yrectItem[index].left &&m_mpos.xrectItem[index].top && m_mpos.ydata) delete pData->data;				// If Texture Image Exists 
		delete pData; 
	} 
 
} 
 
bool CMenu::LoadPicture(char* filename,AUX_RGBImageRec *pData) 
{ 
    pData=auxDIBImageLoad(filename); 
    if(!pData) return false; 
 	return true; 
} 
 
void CMenu::DrawPicture(int xpos,int ypos,AUX_RGBImageRec *pData) 
{ 
	glRasterPos3i(xpos-400,300-ypos,-300); 
   	glDrawPixels(pData->sizeX,pData->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pData->data); 
}