Перейти к содержанию
Опубликовано
comment_160

Продолжаем нашу тему с рисованием: http://fanhack.ru/index.php/topic/76-ukrashaem-nashu-osnovu-%E2%84%962

 

 

Добавим в меню кнопки для категорий и сделаем скрытие, показ меню.

 

1. Добавим код кнопки

2. Нарисуем несколько кнопок для примера

3. Добавим кнопку для скрытия и показа меню

 

 

Добавим в наш класс новую функцию для отрисовки кнопок:

 

Сначала нужно прописать прототип функции в класс

bool DrawButtons(char *names,float x, float y, float w, float h, int num, int &arg, D3DCOLOR Color);

Дальше опишем саму функцию

bool D3DMenu::DrawButtons(char *names, float x, float y, float w, float h, int num, int &arg, D3DCOLOR Color)
{
    DrawBox(x, y*num, w, h, Color);// основной бокс кнопки. В координатах Y идет умножение на num поесть тут мы указываем порядок кнопки для      смещения кнопок по порядку чтобы они не рисовались в одном месте
   if (IsInBox(x, y*num, w, h))// функция определяет положение курсора на боксе. если мышка наведена на бокс то выполниться след. код.
   {
     DrawBox(x - 1, y*num - 1, w + 2, h + 2, Color);// Тут для обозначения и красоты). При наведении мыши будет рисовать еще один бокс только с увеличенным размером на 1 пиксель
     if (IsKeyPressed(VK_LBUTTON, 0))// Функция определяет нажата ли кнопка. VK_LBUTTON - Байт левой кнопки мыши. Можно указать код любой кнопки. В гугл коды клавиш.
       {
         if (arg == 0)arg = 1;// Это аргумент для передачи инфы о том что была нажата кнопка. 
         else
         {
            arg = 0;
         }
      }
   }


DrawText(x + (w/2), y*num + 5, WHITE, names, DT_CENTER);// текс
DrawBox(x, y*num , w , h/2, WHITETr);// Бокс для красоты с измененным Alfa цвета. #define WHITETr D3DCOLOR_ARGB(30, 255, 255, 255) где 30 - это alfa прозрачность. Для того чтобы сделать вид глянца.


   return 0;
}

Код кнопки добавили теперь нарисуем несколько в DrawMenu:

DrawButtons("Кнопка 1", X + 5, Y + 25, 100, 30, 1, but1, RED);// int but1 = 0; нужно прописать за пределы функции DrawMenu это будет переключатель. Получает что в нажатии кнопки but1 поменяет значение на 1 при повторном нажатие 0. Остальное надеюсь понятно.
DrawButtons("Кнопка 2", X + 5, Y + 25, 100, 30, 2, but2, RED);// int but2 = 0;
DrawButtons("Кнопка 3", X + 5, Y + 25, 100, 30, 3, but3, RED);// int but3 = 0;

 

-ORqhDuWTTqlRUQIIFiiPg.png

 

 

 

Теперь сделаем чтоб можно было скрыть и показать меню на кнопку Insert:

bool menu_d = 1;// добавим в класс

 

DlI-urnORLONxzoiRaglRg.png

 

 

теперь в функцию DrawMenu добавим код который будет обрабатывать наш замысел)

if (IsKeyPressed(VK_INSERT, 0))// Функция была описана выше. VK_INSERT - тут код клавиши инсерт
{
   if (menu_d == 0)menu_d = 1;
   else
   {
       menu_d = 0;
   }
}

 

gb4-8WD9S1i21HxbN8L_Ug.png

 

Теперь пропишем чтоб отрисовка выполнялась только когда menu_d равен 1 (true)

перед началом отрисовки пишем:

if(menu_d)
{

 

 

QLJhdnIoTkmFz5u0fCgyow.png

 

 

И нужно закрыть условие в конце рисовки:

 

XW2DlXIrQ-eP65azy0yVAw.png

 

 

Добавим проверку на нажатие наших кнопок:

 

Пропишем в DrawMenu:

if (but1 == 1)
{
    DrawBox(X+500, Y+300, 100, 100, BLUE);
}
if (but2 == 1)
{
    DrawBox(X + 600, Y + 300, 100, 100, BLUE);
}
if (but3 == 1)
{
    DrawBox(X + 400, Y + 300, 100, 100, BLUE);
}

 

7Ts9IR6BSluAQT_qyAXrkA.png

 

 

Ну и результат:

 

Xw81g6LiR8aO-fJLKMW7Yg.png

 

при наведении кнопка ярче) 

 

Можно добавить еще что нибудь например рамку для кнопки. Чтоб при наведении на кнопку не рисовался еще бокс а просто обводилась рамка.

Пример:

bool D3DMenu::DrawButtons(char *names, float x, float y, float w, float h, int num, int &arg, D3DCOLOR Color)
{
   DrawBox(x, y*num, w, h, Color);
   if (IsInBox(x, y*num, w, h))
   {
       DrawBox(x - 1, y*num - 1, w + 2, h + 2, Color);// бокс можно убрать)
       DrawBorder(x , y*num, w, h,1, WHITE);// а это оставить и кнопка будет обводиться белым цветом так как цвет указан WHITE

Надеюсь хоть немного понятно объясняю))

 

На всякий случай выкладываю исходник этого урока(примера): Скачатьььььь

Рекомендуемые сообщения

Опубликовано
comment_367

спасибо большое за подробные объяснения, очень грамотно и со старанием все оформлено и разжевано..Не пойму вот только почему dll-ка не показывает в такой d3d9 как cs 1.6...Уверен, что чего то там не хватает, хочется узнать чего именно или где об этом можно полистать, может подсказку какую-то маленькую, ну а что касается вашего тестового окна, мне понравилось, все оч красиво смотрится, спс вам, буду ждать продолжения ваших уроков

Опубликовано
comment_368

спасибо большое за подробные объяснения, очень грамотно и со старанием все оформлено и разжевано..Не пойму вот только почему dll-ка не показывает в такой d3d9 как cs 1.6...Уверен, что чего то там не хватает, хочется узнать чего именно или где об этом можно полистать, может подсказку какую-то маленькую, ну а что касается вашего тестового окна, мне понравилось, все оч красиво смотрится, спс вам, буду ждать продолжения ваших уроков

кс 1.6 на OpenGL

With love by P45H3 =)

02a1fd3cc9ed.png

 

 

Гость
Эта тема закрыта для публикации ответов.