Вход на сайт
Меню как в Q&A 20.04.2025
15
Вчера, 20:07
Всем привет! Скучно и я решил поиграться, создал своё меню где-то за 2 часа, как вот это, правда немного криво, но когда будет время и желания, я подправлю код:
Подсказку я сделаю позже:
Программировал я на этом:
Вот код:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <bios.h> #define MENU_COUNT 6 /* Количество меню 5 */ #define M_LEFT 14 /* Меню влево 14 */ #define M_TOP 10 /* Меню вверх 10 */ #define M_WIDTH 40 /* Ширина меню 40 */ #define M_HEIGHT 20 /* Высота меню 20 */ #define KEY_ESC 283 /* Клавиша ESC */ #define KEY_LEFT 19200 /* Клавиша влево */ #define KEY_RIGHT 19712 /* Клавиша вправо */ #define KEY_UP 18432 /* Клавиша вверх */ #define KEY_DOWN 20480 /* Клавиша вниз */ /* Меню */ char *menus[] = {"Ф - Файл", "О - Отчёт", "Р - Редактор", "А - Ассистент", "У - Утилиты", "В - Выход"}; /* Для рисования меню */ void draw_menu(int x, int y) { int j=0; textattr(CYAN * 0x10 + BLACK); for(j=0; j<MENU_COUNT; j++) { gotoxy(x, y+j); cprintf("%s", menus[j]); } } /* Для рисования меню с выделеным элементом */ void draw_menu_sel(int sel, int x, int y) { int j=0; for(j=0; j<MENU_COUNT; j++) { gotoxy(x, y + j); if(j == sel) textattr(CYAN * 0x10 + WHITE); else textattr(CYAN * 0x10 + BLACK); cprintf("%s", menus[j]); } } int main(void) { int x, y, key, sel, j; /* Устанавливает синий фон, белые буквы */ textattr(BLUE * 0x10 + CYAN); /* Очищает экран */ clrscr(); /* Устанавливает чёрный фон, чёрные буквы */ textattr(BLACK * 0x10 + BLACK); /* Рисует чёрный прямоугольник */ for(y=M_TOP+1; y<M_HEIGHT+1; y++) { for(x=M_LEFT+1; x<M_WIDTH+1; x++) { gotoxy(x, y); cprintf(" "); } } /* Устанавливает фон циановый, а буквы белые */ textattr(CYAN * 0x10 + WHITE); /* Рисует циановый прямоугольник */ for(y=M_TOP; y<M_HEIGHT; y++) { for(x=M_LEFT; x<M_WIDTH; x++) { gotoxy(x, y); cprintf(" "); } } /* Переходит для рисование меню */ gotoxy(M_LEFT, M_TOP); textattr(CYAN * 0x10 + WHITE); /* Отображает Главное меню */ cprintf(" Главное меню"); gotoxy(M_LEFT, M_TOP+1); /* Отображает ------------------------ */ cprintf(" ------------------------ "); /* Инициализация */ key = -1; sel = 0; /* Печатает на экране быструю подсказку */ gotoxy(1, 21); textattr(BLUE * 0x10 + CYAN); for(j=1; j<80; j++) { gotoxy(j, 21); cprintf("-"); } gotoxy(1, 22); cprintf("Q&A версия 55.0 Copyright(c) 1990-2025 uscheswoi_82 All right reserved"); textattr(BLUE * 0x10 + WHITE); gotoxy(1, 23); cprintf("Напоминание:Выберете утилиты для настройки принтера"); textattr(BLUE * 0x10 + CYAN); gotoxy(1, 24); cprintf("ESC или В-выход из программы F1-Отображение подсказки <----| - Выбрать"); /* Рисует меню */ draw_menu(M_LEFT + 6, M_TOP + 3); /* Рисует меню */ draw_menu_sel(0, M_LEFT + 6, M_TOP + 3); /* Цикл, пока не нажмёт пользователь на клавишу ESC */ while(key != KEY_ESC) { /* Ждёт нажатие клавиши */ key = bioskey(0); /* Определяет какая клавиша нажата */ switch(key) { case KEY_UP: /* Если нажата клавиша вниз, проверяет где находится курсор меню */ if(sel > 0) sel --; break; case KEY_DOWN: /* Если нажата клавиша вверх, проверяет где находится курсор меню */ if(sel < MENU_COUNT - 1) sel ++; break; } /* Рисует меню */ draw_menu_sel(sel, M_LEFT + 6, M_TOP + 3); } /* Если нажали клавишу ESC */ /* Устанавливает фон чёрный, а цвет букв серый */ textattr(BLACK * 0x10 + LIGHTGRAY); /* Очищает экран */ clrscr(); }
Вуаля! А вот и результат:
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение