Всем привет
Вот недавно сделал универсальное второе меню (т.е при открытии вкладки в основном меню у вас появляется другое)..
Скрины не могу сделать, так как сейчас у меня проблемы с установкой Microsoft Visual Studio 2010
Если у вас исходник Трололо2, PHC D3D Menu , или какой нибудь (похожий на эти), то запоминаем, все функции которые я дам, надо будет объявлять в *.h файле (т.е например, вы вставляете функцию в файл cMain.cpp, то объявление будет в файле cMain.h)..
И так, следующий код вставляем в файл, где все остальные элементы управления менюхой (чаще всего либо в файле cMain.cpp или cManu.cpp, ну или в крайних случаях cMenu.h (очень редко)):
Код:
BOOL cMenu::IsInBox(int x,int y,int w,int h)
{
POINT MousePosition;
GetCursorPos(&MousePosition);
ScreenToClient(GetForegroundWindow(),&MousePosition);
return(MousePosition.x >= x && MousePosition.x <= x + w && MousePosition.y >= y && MousePosition.y <= y + h);
}
BOOL cMenu::IsKeyPressed(int Key,DWORD dwTimeOut)
{
if( HIWORD( GetKeyState( Key ) ) )
{
if( !kPressingKey[Key].bPressed || ( kPressingKey[Key].dwStartTime && ( kPressingKey[Key].dwStartTime + dwTimeOut ) <= GetTickCount( ) ) ){
kPressingKey[Key].bPressed = TRUE;
if( dwTimeOut > NULL )kPressingKey[Key].dwStartTime = GetTickCount( );
return TRUE;
}
}
else
kPressingKey[Key].bPressed = FALSE;
return FALSE;
}
void cMenu::Draw_Button(int x,int y,int w,int h,int &Var,int MaxSize,bool Mode,char* ButtonText,LPDIRECT3DDEVICE9 pDevice,CD3DFont *font,int Corektion)
{
#define Button_box D3DCOLOR_ARGB(255,0,255,0)//Цвет фона кнопки
#define color_txt_on D3DCOLOR_ARGB(255,0,0,255)//Цвет текста активированной функции
#define colot_txt_off D3DCOLOR_ARGB(255,255,0,0)//Цвет текста отключенной функции.
int Set_X,Set_Y;
Set_X = (w/4)-(w/10)+Corektion;
Set_Y = (h/4)-2;
if(IsInBox(x,y,w,h))
{
DrawBox((x+1),(y+3),(w-1),(h-1),CYAN,pDevice);
DrawBorder((x+1),(y+3),(w-1),(h-1),Color_Rec,pDevice);
if(IsKeyPressed(VK_LBUTTON,0))
{
if(Mode==FALSE)
{
if(Var != 0 && Var > 0)
{
Var -=1;
}
}else{
if(Var < MaxSize)
{
Var +=1;
}
}
}
}else{
DrawBox((x+1),(y+3),(w-1),(h-1),LIGHTGRAY,pDevice);
DrawBorder((x+1),(y+3),(w-1),(h-1),Color_Rec,pDevice);
}
if(Var == 0)
{
font->DrawText(x+Set_X,y+Set_Y,MOCCASIN,ButtonText,DT_SHADOW);
}
else if(Mode==1)
{
font->DrawText(x+Set_X,y+Set_Y,LIME,ButtonText,DT_SHADOW);
}else{
font->DrawText(x+Set_X,y+Set_Y,AQUA,ButtonText,DT_SHADOW);
}
}
void cMenu::Gotovii(char* ButtonText,char* text,int Var,int numerfunk,char* Text2,char* Text3,int nomergroup,int Nomer)
{
int Menu2Pox_X = (X + WIDTH + 20);//Вычисление позиции кнопок по оси Х
int Pos_Button_X = Menu2Pox_X + 50;//Вычисление позиции кнопок по оси Х
int a = 20; //Уже не помню что /dgs вчера делал, забыл уже что это /problem//
int Otstup = 50;//Х Фактор, т.е Отступ от чего либо
int Sirina_Button = WIDTH;//Ширина кнопок
int Visota_Button = 15;//Высота кнопок
if(nomergroup=0)//Первая группа..
{
font->DrawText(Menu2Pox_X,Y + (Otstup * Nomer),C_OFF,ButtonText,DT_LEFT);//Рисует текст - название функции
Draw_Button(Pos_Button_X + Otstup,Y + (Otstup * Nomer),Sirina_Button,Visota_Button,Var,numerfunk,1,Text2,pDevice,font,1);//Кнопка, увеличивает
Draw_Button(Pos_Button_X - Otstup,Y + (Otstup * Nomer),Sirina_Button,Visota_Button,Var,numerfunk,0,Text3,pDevice,font,1);//Кнопка, уменьшает
font->DrawText((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),C_TITLE,(char*)text[Var],DT_CENTER);//Рисует текст - чар
}
if(nomergroup=1)//Группа номер 2, рисует маленькие квадратики в месте, где обычно пишется текст "чар"...
{
Draw_Button(Pos_Button_X + Otstup,Y + (Otstup * Nomer),Sirina_Button,Visota_Button,Var,numerfunk,1,Text2,pDevice,font,1);//Кнопка, увеличивает
Draw_Button(Pos_Button_X - Otstup,Y + (Otstup * Nomer),Sirina_Button,Visota_Button,Var,numerfunk,0,Text3,pDevice,font,1);//Кнопка, уменьшает
if(Var=1){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,255,0,0),pDevice); } //RED
if(Var=2){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,255,125,0),pDevice); } //ORANGE
if(Var=3){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,0,0,255),pDevice); } //BLUE
if(Var=4){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,0,255,0),pDevice); } //GREEN
if(Var=5){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,125,0,255),pDevice); } //PURPLE
if(Var=6){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,255,255,255),pDevice); } //WHITE
if(Var=7){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,255,255,0),pDevice); } //YELLOW
if(Var=8){ DrawBox((Pos_Button_X + Otstup)-(Otstup / 2),Y + (Otstup * Nomer),10,10,D3DCOLOR_ARGB(255,128,128,128),pDevice); } //GREY
}
}
void cMenu::Gotovii_Cat(char* ButtonText,int Var,int Nomer)//Кнопки - эффект папок, т.е они функции не включают, а работают с вкладками в меню ВХ
{
int Menu2Pox_X = (X + WIDTH + 20); //Вычисление позичии кнопок по оси Х
int Pos_Button_X = Menu2Pox_X + 50; //Вычисление позиции кнопки по оси Х
int Otstup = 50; //Х Фактор, т.е Отступ от чего либо
int pos_X = X + WIDTH + 20 + (WIDTH / 2); //Вычисление позиции по оси Х
if(Var < 0) //Если функция отключена, то кнопка будет "активируящая", а так же текст показывающий на активацию, т.е ">>>>>>>"
{
font->DrawText(pos_X,Y + (Otstup * Nomer),Color_Text_Menu2,ButtonText,DT_LEFT);//Рисует текст - название функции
Draw_Button(Menu2Pox_X + Otstup,Y + (Otstup * Nomer),WIDTH,15,Var,1,1,">>>>>",pDevice,font,1);//Кнопка, увеличивает значение
}
if(Var > 0) //Если функция включена, то кнопка будет "деактивирующая", т.е выключать.. И текст будет "<<<<<<"
{
font->DrawText(pos_X,Y + (Otstup * Nomer),Color_Text_Menu2,ButtonText,DT_LEFT); //Рисует текст - название функции
Draw_Button(Menu2Pox_X + Otstup,Y + (Otstup * Nomer),WIDTH,15,Var,1,0,"<<<<<",pDevice,font,1); //Кнопка, уменьшает значение или просто отключает
}
}
void cMenu::Gotovii_Text(char* ButtonText,char* text,int Nomer)
{
Gotovii(ButtonText,text,wtf.text,0,0,0,0,Nomer);
}
cMenu:: - название класса (в своем исходнике разберетесь)..
В принципе основное в самих функциях объяснил.
Чуть не забыл, если вы делаете в исходнике (не PHC D3D Menu), то объявляем:
Код:
int X=10; //Координаты меню1 по оси Х (т.е отступ от левого края экрана)
int Y=38; //Координаты меню1 по оси У (т.е отступ от верхнего края экрана)
int WIDTH=215; //Ширина
Перед этим все функции объявляем в файле cMain.h.
Затем вставляем в cMenu.h (если у вас исход PHC D3D Menu) (вот сюда Screen Shot
[Ссылки могут видеть только зарегистрированные пользователи. ]
Обновил 1 пост, убрал ошибку допущенную..
Что там было, там получается на кождую кнопку / строчку я случайно вставил Box для фона
И про появлении меню прорисовывалось куча этих Box.. И очень сильно нагружала процесс...
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).