Вход на сайт
Меню как в Q&A 20.04.2025
448
20.04.25 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();
}
Вуаля! А вот и результат:

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
Моя ФЛ Он и Она
Моя ФЛ Он и Она
список