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