Простой пример менюшки:
1. Создадим новый проект см.:
2. Напишим такой код main.cpp:
Код:
#include <conio.h>
#include <cstring.h>
#include <graphics.h>
#include <bios.h>
#define MAX_ITEMS 20 // Максимальное количество менюшек
#define IS_SELECTED 1 // Выделена ли менюшка
#define LEFT 19200 // Нажатие клавиши влево
#define RIGHT 19712 // Нажатие клавиши вправо
// Структура меню, item - текстовка менюшки, x - позиция по координате X, is_selected - выбрана ли менюшка
typedef struct {
string item; // текстовка менюшки
int x; // позиция по координате x
unsigned short int is_selected; // выбрана ли менюшка
} MENU_ITEM;
MENU_ITEM items[MAX_ITEMS]; // Инициализация менюшек
int count = 0; // Инициализация макс менюшек
// Функция для добавления менюшки
void add_item(int x, string item) {
items[count].x = x;
items[count].item = item;
items[count].is_selected = !IS_SELECTED;
count++;
}
// Функция возвращает информвцию о определённой менюшки
MENU_ITEM get_item(int index) {
return items[index];
}
// Функция возвращает максимальное количество менюшек
int get_items_count() {
return count;
}
// Функция устанавливает выбрата менюшка или нет
void set_selected_item(int index, unsigned int short value) {
for(int i=0; i<get_items_count(); i++)
items[i].is_selected = !IS_SELECTED;
items[index].is_selected = value;
}
// Функция очищает меню
void clean_menubar() {
MENU_ITEM itm;
setcolor(BLUE);
setfillstyle(SOLID_FILL, BLUE);
rectangle(0, 0, getmaxx(), 15);
floodfill(2, 2, BLUE);
for(int i=0; i<get_items_count(); i++) {
itm = get_item(i);
outtextxy(itm.x, 5, itm.item.c_str());
}
}
// Функция рисует меню
void draw_menu() {
MENU_ITEM itm;
for(int i=0; i<get_items_count(); i++) {
itm = get_item(i);
if(itm.is_selected != IS_SELECTED)
setcolor(RED);
else
setcolor(YELLOW);
outtextxy(itm.x, 5, itm.item.c_str());
}
}
int main(void) {
int state = 0;
int selected_item = 0;
int GraphDriver = DETECT;
int GraphMode;
int ErrorCode;
int key = 0;
// Инициализация 640x480, в случае какой-нибудь ошибки выходит
initgraph(&GraphDriver, &GraphMode, "");
ErrorCode = graphresult();
if(ErrorCode != grOk){
exit(1);
}
add_item(10, "File"); // Менюшка File
add_item(80, "Project"); // Менюшка Project
add_item(180, "Help"); // Менюшка Help
// Цикл обработчика нажатия клавиш, чтобы перемещать выделенное меню
while(!state) {
while(!kbhit()) {}
key = bioskey(0);
clean_menubar();
switch(key) {
case LEFT:
if(selected_item > 0)
selected_item--;
break;
case RIGHT:
if(selected_item < get_items_count()-1)
selected_item++;
break;
default:
state = !state;
break;
}
set_selected_item(selected_item, IS_SELECTED);
draw_menu();
}
closegraph();
return 0;
}Результат: