Простой пример менюшки:
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; }
Результат: