Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2011, 23:17   #1
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
Восклицание оригинальное меню в консоли C++

Доброго вечера, помогите разобраться с некоторым кодом, в котором содержится интересное консольное меню с помощью goto xy. Искал в нэте материал по этому но ничего не нашел((. Хотелось бы научиться самому создавать такое меню с нуля, и разобраться как реализовать передвижение стрелочками по пунктам а так же выход при нажатии Esc. Ну и еще в добавок интересует то, как здесь задавались цвета. В этом коде просто много мусора, и он не рабочий, но сама меню рабочая. Программированием занялся недавно, благодарю заранее за помощь.

Код:
#include <iostream>
#include <conio.h>
#include <ctime>
#include <windows.h>
using namespace std;

void gotoxy(short x, short y) // аналог борландовской gotoxy
	{
    HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD  coord  = {x, y};
    SetConsoleCursorPosition(StdOut, coord);
	}


void oformlenie()
{	
	short x=18,y=4;
	gotoxy(x,y);
	cout<<"*"; //st-up-left
	while (x!= 18+40)
	{	
		x++;
		gotoxy(x,y);
		cout<<"="; //up
	}
	x++;
	gotoxy(x,y);
	cout<<"*"; //st-up-right
	while(y!=17)
	{	
		y++;
		gotoxy(x,y);
		cout<<"\1"; //right
	}
	y++;
	gotoxy(x,y);
	cout<<"*"; //st-bot-right
	while(x!=19)
	{	x--;
		gotoxy(x,y);
		cout<<"="; //bottom
	}
	x--;
	gotoxy(x,y);
	cout<<"*"; //st-bot-left
	while(y!= 5)
	{
		y--;
		gotoxy(x,y);
		cout<<"\1"; //left
	}
}

void color (int c)
	{
	HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(StdOut,c+64);
	}
	void clrscr()
	{
		short x=20,y=6;
		while(y!=18)
		{
			while(x!=58)
			{
				gotoxy(x,y);
				cout<<" ";
				x++;
			}
			y++;
			x=20;
		}
	}

int menu (int i)
	{
	setlocale(LC_CTYPE,"");
	system("cls");
	system("color 3F");
	short x = 20, y = 8;
	if(i==3) y++;
	gotoxy(33,6);
	cout<<"..::MENU::..";
	gotoxy(1,0);
	cout<<"'Esc' - vyiti;   Vybor deistviya: strelkami i klavishei 'Enter';\n Ili je sootvetstvuyushimi ciframi;"; 
	gotoxy(x,y);
	char *s[3];
	s[0] = "1 - Avtozapolnenie";
	s[1] = "2 - S klaviatury";
	s[2] = "0 - Exit";
	char *p[5];
	p[0] = "1 - Sort obmenom";
	p[1] = "2 - Sort vuborkoi";
	p[2] = "3 - Sort vstavkoi";
	p[3] = "4 - Quick sort";
	p[4] = "0 - Exit";
	m=y;
	for (k=0;k<i;k++)
		{
		if(i == 3)
			{
			cout<<s[k]; 
			m+=i;
			}
		else
			{
			cout<<p[k];
			m+=2;
			}
	gotoxy(x,m);
	}
	oformlenie();

	gotoxy(x,y);
	//color(11);
	if(i==3)
		cout<<s[0];
	else
		cout<<p[0];
		gotoxy(x,y);
		k=0;
		m=0;
	while(1)
		{
			c = getch();
			switch(c)
			{
				case 48:
				case 27: return 0; 
				case 80:
		if(k+1 < i)
		{
			gotoxy(x,y);
			//color(15);
			if(i==3)
			{
			cout<<s[m];
			y+=i;
			}
			else 
			{
				cout<<p[m];
				y+=2;
			}
			k++;
			m=k;
			//color(14);
			gotoxy(x,y);
			if (i==3)
			cout<<s[k];
			else cout<<p[k];
			gotoxy(x,y);
		}
		break;
case 72:
		if(k >= 1)
		{
			gotoxy(x,y);
			//color(13);
			if(i==3)
			{
			cout<<s[m];
			y-=i;
			}
			else 
			{
				cout<<p[m];
				y-=2;
			}
			k--;
			m=k;
			//color(11);
			gotoxy(x,y);
			if(i==3)
			cout<<s[k];
			else cout<<p[k];
			gotoxy(x,y);
		}
		break;
case 13: 
		//color(15);
		if(i==3 && k == 2)
			return 0;
		if(i==5 && k == 4)
			return 0;
		return k+1;
case 49:
	color(15);
	return 1;
case 50:
	color(15);
	return 2;
case 51:
	color(15);
	return 3;
case 52:
	color (15);
	return 4;
}
}
}
int main(void)
{
		m = menu(3);
		if(m == 0)
		return 0;
		clrscr();
		gotoxy(26,10);
		cout<<"Vvedite razmer massiva: ";
		cin>>n;
        if (m == 1)
         {
         }
         else if (m == 2)
         {
           for(i = 0;i<n;i++)
              {
			    gotoxy(35,12);
                cout<<"Mas ["<<i<<"] = ";
                cin>>mas[i];
				gotoxy(35,12);
				cout<<"                ";
             }
         }
		    while(1)
		   {
		m = menu(5);
		system("cls");
		for(i=0;i<n;i++)
			   rabmas[i] = mas[i];
		  if (!m) return 0;
		  cout<<"Массив:";

		cout<<"\nOtsortirovannuy massiv:";
}
mego4el вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
меню как на сайте p&g (меню ввиде таблицы) ilma55 WordPress и другие CMS 0 19.09.2010 19:09
И сново sendMessage =) Как нажать пункт верхнего меню и меню правой кнопки? TwiX Win Api 9 15.10.2009 01:57
Для доступа к пунктам главного меню клавиши ALT + подчеркнутая буква меню в офис 2007? Окоча Юра Microsoft Office Word 1 24.02.2009 12:29
Меню с Items в виде набора Bitmap (как меню редактирования в Word'е) chandrasecar Мультимедиа в Delphi 7 14.01.2009 09:20
Работа с меню в консоли kanja Общие вопросы C/C++ 4 24.11.2008 22:37