Создание меню используя библиотеку graphics.h - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день! Подскажите пожалуста, как решить проблему: Задание: Создать меню функциональных клавиш с помощью библиотеки graphics.h. Меню выровнено по левому краю, а запуск программ при нажатии этих клавиш происходит отдельным окном в правой части экрана. При этом меню не исчезает. Проблема в том, что не получается сделать запуск прог в отдельном окне... Команда window(), не работает, точнее не создает отдельное окно, а команда gotoxy() перемещает курсор только по оси У. Подскажите пожалуйста, как сделать так, чтобы при нажатии клавиши программы запускались в отдельном окне.. Вот текст проги, делаю в BC 3.1
#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);
  }
}
window(30,1,80,25); gotoxy(1,1); эти строки пытался оставить как внутри функции, так и непосредственно перед выводом... вывод 1111111111 сделал просто чтобы смотреть результат, на тех местах будут проги

Решение задачи: «Создание меню используя библиотеку 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы