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