📄 mymenus.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 + -