Создание меню используя библиотеку graphics.h - C (СИ)
Формулировка задачи:
Добрый день! Подскажите пожалуста, как решить проблему:
Задание: Создать меню функциональных клавиш с помощью библиотеки graphics.h. Меню выровнено по левому краю, а запуск программ при нажатии этих клавиш происходит отдельным окном в правой части экрана. При этом меню не исчезает.
Проблема в том, что не получается сделать запуск прог в отдельном окне... Команда window(), не работает, точнее не создает отдельное окно, а команда gotoxy() перемещает курсор только по оси У.
Подскажите пожалуйста, как сделать так, чтобы при нажатии клавиши программы запускались в отдельном окне..
Вот текст проги, делаю в BC 3.1
window(30,1,80,25);
gotoxy(1,1);
эти строки пытался оставить как внутри функции, так и непосредственно перед выводом...
вывод 1111111111 сделал просто чтобы смотреть результат, на тех местах будут проги
#include <graphics.h> #include <iostream.h> #include <stdio.h> #include <conio.h> #include <dos.h> #include <math.h> void Menu(int ch); void main() { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, ""); char ch; Menu (0); do { ch = getch(); if (ch == '\0') { ch = getch(); switch (int(ch)) { case 59: { Menu(1); cout<<"\n1111111111"; cout<<"\n1111111111"; cout<<"\n1111111111"; getch(); Menu(0); break; } case 60: { Menu(2); Menu(0); break; } case 61: { Menu(3); Menu(0); break; } case 62: { Menu(4); Menu(0); break; } } } else putch(ch); } while ( int(ch) != 27 ); } void Menu(int ch) { if (!ch) { cleardevice(); setbkcolor(BLACK); setcolor(RED); outtextxy(5,10," F1: Rabota 1"); outtextxy(5,30," F2: Rabota 2"); outtextxy(5,50," F3: Rabota 3"); outtextxy(5,70," F4: Spravka"); } else { switch (ch) { case 1: { setcolor(BLUE); outtextxy(5,10," F1: Rabota 1");break; } case 2: { setcolor(BLUE); outtextxy(5,30," F2: Rabota 2");break; } case 3: { setcolor(BLUE); outtextxy(5,50," F3: Rabota 3");break; } case 4: { setcolor(BLUE); outtextxy(5,70," F4: Spravka");break; } } window(30,1,80,25); gotoxy(1,1); } }
Решение задачи: «Создание меню используя библиотеку graphics.h»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <graphics.h> void opengraph(){ int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if(errorcode != grOk){ printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } } void mainwindow(){ setfillstyle(SOLID_FILL, BLUE); bar(0, 0, getmaxx(), getmaxy()); int x = 20, y = 20, step = 40; setcolor(WHITE); outtextxy(x, y, "Press the key to chose procedure below:"); outtextxy(x, y +=step, "F1: a+b"); outtextxy(x, y += step, "F2: a-b"); outtextxy(x, y += step, "F3: a*b"); outtextxy(x, y += step, "F4: a/b"); outtextxy(x, y += step, "Esc: Exit"); settextstyle(0, 0, 1); } void drawform(){ int step = 20; int x = getmaxx()/2+15, x1 = getmaxx()-step; int y = step, y1 = getmaxy()-step; setfillstyle(SOLID_FILL, BLACK); bar(x, y, x1, y1); } void iodata(char c){ double a, b, result; drawform(); int x = 45, y = 3; const short step = 1; gotoxy(x, y += step); printf("Enter values for: a%cb", c); gotoxy(x, y += step); printf("Enter a: "); scanf("%lf", &a); gotoxy(x, y += step); printf("Enter b: "); scanf("%lf", &b); switch(c){ case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; default: result = 0; break; } gotoxy(x, y += step); printf("Result: %.2lf", result); gotoxy(x+1, 25); printf("Press anu key to continue..."); getch(); mainwindow(); } int main(){ clrscr(); opengraph(); char c; mainwindow(); while(c!=27){ //Esc c = getch(); if(c == 59) iodata('+'); //F1 if(c == 60) iodata('-'); //F2 if(c == 61) iodata('*'); //F3 if(c == 62) iodata('/'); //F4 } closegraph(); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д