Добавим в меню кнопки для категорий и сделаем скрытие, показ меню.
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;
Теперь сделаем чтоб можно было скрыть и показать меню на кнопку Insert:
bool menu_d = 1;// добавим в класс
теперь в функцию DrawMenu добавим код который будет обрабатывать наш замысел)
if (IsKeyPressed(VK_INSERT, 0))// Функция была описана выше. VK_INSERT - тут код клавиши инсерт
{
if (menu_d == 0)menu_d = 1;
else
{
menu_d = 0;
}
}
Теперь пропишем чтоб отрисовка выполнялась только когда menu_d равен 1 (true)
перед началом отрисовки пишем:
if(menu_d)
{
И нужно закрыть условие в конце рисовки:
Добавим проверку на нажатие наших кнопок:
Пропишем в 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);
}
Ну и результат:
при наведении кнопка ярче)
Можно добавить еще что нибудь например рамку для кнопки. Чтоб при наведении на кнопку не рисовался еще бокс а просто обводилась рамка.
Пример:
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_160Продолжаем нашу тему с рисованием: http://fanhack.ru/index.php/topic/76-ukrashaem-nashu-osnovu-%E2%84%962
Добавим в меню кнопки для категорий и сделаем скрытие, показ меню.
1. Добавим код кнопки
2. Нарисуем несколько кнопок для примера
3. Добавим кнопку для скрытия и показа меню
Добавим в наш класс новую функцию для отрисовки кнопок:
Сначала нужно прописать прототип функции в класс
Дальше опишем саму функцию
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;Теперь сделаем чтоб можно было скрыть и показать меню на кнопку Insert:
теперь в функцию DrawMenu добавим код который будет обрабатывать наш замысел)
if (IsKeyPressed(VK_INSERT, 0))// Функция была описана выше. VK_INSERT - тут код клавиши инсерт { if (menu_d == 0)menu_d = 1; else { menu_d = 0; } }Теперь пропишем чтоб отрисовка выполнялась только когда menu_d равен 1 (true)
перед началом отрисовки пишем:
if(menu_d) {И нужно закрыть условие в конце рисовки:
Добавим проверку на нажатие наших кнопок:
Пропишем в 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); }Ну и результат:
при наведении кнопка ярче)
Можно добавить еще что нибудь например рамку для кнопки. Чтоб при наведении на кнопку не рисовался еще бокс а просто обводилась рамка.
Пример:
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Надеюсь хоть немного понятно объясняю))
На всякий случай выкладываю исходник этого урока(примера): Скачатьььььь