⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mymenus.h

📁 gamecode 很不错的小游戏源代码
💻 H
字号:
//************************************************************
//游戏菜单类
//作者:曾铮
//时间:2004年6月
//说明:用于游戏中显示菜单,与用户交互,返回选择项目。
//************************************************************
#ifndef MyMenus_h_
#define MyMenus_h_

#include "Myclasses\MyDdraw.h"
//#include "CZDemo.h"

extern void PressKey(const DWORD& key,const int& x);
extern void GL_GamePicShowSilence();

class MyMenus
{
private:
	LPDIRECTDRAWSURFACE7		p_Menu;//菜单底图。
	RECT M_rect;//底图矩形数据。
//	char* M_content;//菜单内容。
//	int M_choices;//选项个数。
	int M_x,M_y;//菜单左上角坐标。
	int M_start;//默认菜单选项。
	int M_curchoice;//当前选项。

public:
	MyMenus();

	//x,y:菜单显示位置,char* bgbmp:图片路径,bx,by:图片长宽,mrect:菜单图片矩形,start:起始先项

	MyMenus(int x,int y,char* bgbmp,int bx,int by,RECT mrect,int start=0);

	//显示菜单。
	//mx,my为选项偏移量,tx,ty为标题偏移量
	int ShowtMenu(char* title, char* content[],int choin,int mx=5,int my=40 ,int tx=30,int ty=5);
	virtual ~MyMenus();

private:
	void mshow(char* title, char* content[],int choin,int mx=5,int my=40,int tx=30,int ty=5);//更新显示菜单项
};

MyMenus::MyMenus()
{
	this->M_start=0;
}

MyMenus::MyMenus(int x,int y,char* bgbmp,int bx,int by,RECT mrect,int start)
{
	this->M_x=x;
	this->M_y=y;
	CreateBitmap(p_Menu,bx,by,bgbmp,DDSCAPS_SYSTEMMEMORY);
	this->M_rect=mrect;
	this->M_start=start;
}

void MyMenus::mshow(char* title, char* content[],int choin,int mx,int my,int tx,int ty)
{
	GL_GamePicShowSilence();		

	PressKey(VK_CONTROL,1);
	Blt(pBBuf, M_x,M_y, p_Menu, M_rect, false);//贴菜单图(M_x,M_y)处。
	int menux=M_x+mx;//选单中的选择项的左上坐标
	int menuy=M_y+my;
	PrintText(pBBuf,M_x+tx,M_y+ty,title);
	for( int i=0; i<choin; i++ )
	{
		DWORD T1=0,T2=0;
		if( i == M_start )
		{
			T1=OPAQUE;
			T2=RGB(255,255,0);
		}
		PrintText(pBBuf, menux+60+i*60, menuy, content[i],RGB(0,0,0), T1, T2);	
	}
	Flip();	
}

int MyMenus::ShowtMenu(char* title, char* content[],int choin,int mx,int my,int tx,int ty)
{
	this->mshow(title,content,choin,mx,my,tx,ty);
	int choose=0;
	int Num=choin;
	while(true)
	{
		/////////////////////////////////////////////////////
		if( GetAsyncKeyState(VK_RIGHT) )	//下一项
		{
			PressKey(VK_RIGHT,1);
			choose=(choose+1)%Num;

			this->M_start=choose;
			this->mshow(title,content,choin,mx,my,tx,ty);
		}
		if( GetAsyncKeyState(VK_LEFT) )	//上一项
		{
			PressKey(VK_LEFT,1);
			if( choose==0 )		//到末项就返回首项。
				choose=Num-1;
			else 
				choose--;

			this->M_start=choose;
			this->mshow(title,content,choin,mx,my,tx,ty);
		}
		if( GetAsyncKeyState(VK_RETURN) )	//确定
		{
//			while( GetAsyncKeyState(VK_RETURN) )
//			{
				//防止连击。
//			}
			PressKey(VK_RETURN,1);
			return choose;	//返回选择的项。
		}
	}
	return 0;
}


MyMenus::~MyMenus()
{
	if( this->p_Menu != NULL )
	{
		this->p_Menu->Release();
		this->p_Menu = NULL;
	}
}


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -