www.gusucode.com > VC++游戏雷霆战机源代码-源码程序 > VC++游戏雷霆战机源代码-源码程序\code\Menu.cpp

    //Download by http://www.NewXing.com
// Menu.cpp: implementation of the CMenu class.
//
//////////////////////////////////////////////////////////////////////

#include "Menu.h"

char* CMenu::menuText[] = { "开始游戏",
						    "游戏说明",
						    "退出游戏"};

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMenu::CMenu()
{

}

CMenu::CMenu(CDirectWnd* win)
{
	m_win = win;
	m_choseitem = 1;
	m_itemnum = 3;
	for(int i=0;i<256;i++)
	{
		keydown[i]=0;
	}
}

CMenu::~CMenu()
{
	m_win = NULL;
}

void CMenu::CheckKeyboard()
{
	if(GetKey(VK_UP))
	{		
		ChangeItem(-1);
	}
	if(GetKey(VK_DOWN))
	{			
		ChangeItem(1);
	}
}

void CMenu::ChangeItem(int num)
{
	switch(num)
	{
		case -1:
			m_choseitem=(m_choseitem>1)?(m_choseitem-1):1;
			break;
		case 1:
			m_choseitem=(m_choseitem<m_itemnum)?(m_choseitem+1):m_itemnum;
			break;
	}
}
/*
void CMenu::AddTextItem(int x, int y, char *text, COLORREF textcolor,COLORREF bgcolor,int type)
{
	HDC buf_hdc;
	m_win->lpBackBuffer->GetDC(&buf_hdc);

	SetTextColor(buf_hdc,textcolor);
	if(type==1)
		SetBkMode(buf_hdc, TRANSPARENT);
	else if(type==2)
	{
		SetBkColor(buf_hdc,bgcolor);		
		SetBkMode(buf_hdc,OPAQUE);
	}
	TextOut(buf_hdc,x,y,text,strlen(text));
	m_win->lpBackBuffer->ReleaseDC(buf_hdc);
}

int CMenu::Run()
{
	CheckKeyboard();
	AddTextItem(280,140,"雷霆战机",RGB(0,255,128),RGB(255,255,255),1);
	AddTextItem(280,180,menuText[0],RGB(255,255,0),RGB(255,0,255),(m_choseitem==1)?2:1);
	AddTextItem(280,200,menuText[1],RGB(255,255,0),RGB(255,0,255),(m_choseitem==2)?2:1);
	AddTextItem(280,220,menuText[2],RGB(255,255,0),RGB(255,0,255),(m_choseitem==3)?2:1);
	AddTextItem(280,240,menuText[3],RGB(255,255,0),RGB(255,0,255),(m_choseitem==4)?2:1);
	return m_choseitem;
}
*/

void CMenu::AddMenuItem(int x, int y, char *text[], COLORREF textcolor,COLORREF bgcolor,int type)
{
	HDC buf_hdc;
	m_win->lpBackBuffer->GetDC(&buf_hdc);
	SetTextColor(buf_hdc,textcolor);

	for(int i = 0 ; i < m_itemnum ; i++)
	{
		
		SetBkMode(buf_hdc, TRANSPARENT);
		SetBkColor(buf_hdc,RGB(0,0,0));
		if(type-1 == i)
		{				
			SetBkMode(buf_hdc,OPAQUE);
			SetBkColor(buf_hdc,bgcolor);	
		}
		TextOut(buf_hdc,x,y+20*i,text[i],strlen(text[i]));
	}
	m_win->lpBackBuffer->ReleaseDC(buf_hdc);
}

void CMenu::AddMenuTitle(int x, int y, char *text, COLORREF textcolor)
{
	HDC buf_hdc;
	m_win->lpBackBuffer->GetDC(&buf_hdc);

	SetTextColor(buf_hdc,textcolor);		
	SetBkMode(buf_hdc, TRANSPARENT);
	TextOut(buf_hdc,x,y,text,strlen(text));
	
	m_win->lpBackBuffer->ReleaseDC(buf_hdc);
}

int CMenu::Run()
{	
	CheckKeyboard();
	m_win->BltBitMap(m_win->lpBKGObject[0]);
	AddMenuTitle(SrcWidth/2 - 40,180,"雷霆战机",RGB(0,255,128));
	AddMenuItem(SrcWidth/2 - 40,240,menuText,RGB(255,255,0),RGB(255,0,255),m_choseitem);
	return m_choseitem;
}

BOOL CMenu::GetKey(int key)
{
  if(KEYDOWN(key))
  {
	  keydown[key]=1;
  }
  if(keydown[key])
  {	  
	  if(!KEYDOWN(key))
	  {
		  keydown[key]=0;
		  return TRUE;
	  }
	  return FALSE;
  }
  return FALSE;
}