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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 21:18   #1
DotCom
Новичок
Джуниор
 
Регистрация: 19.06.2009
Сообщений: 2
По умолчанию создать вложенное меню

код:
Код:
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <iomanip>

using namespace std;

static short posionITR = 0 ;
const short menu_size = 5 ;

struct TEXT_MENU_
{
	char name [ 15 ];
	bool activ ;
	COORD coord;
	TEXT_MENU_( char * st , bool acti , int posX , int posY )
	: activ(acti)
	{
		coord.X = posX ;
		coord.Y = posY ;
		strcpy(name,st);
	}
	void PrintTextMenu()
	{

		HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
		SetConsoleCursorPosition(hConsole,coord);
		if ( activ )
			SetColorBgTextMenu( 3 , 14 ) ;
		else
		SetColorBgTextMenu(  ) ;
		cout << setw (10) << name << endl;
		SetColorBgTextMenu(  ) ;

	}
	void SetColorBgTextMenu( short Bg = 0 , short Text = 15 )
	{
		HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
		Bg = Bg << 4 ;
		Bg = Bg | Text ;
		SetConsoleTextAttribute( hConsole , Bg );
	}
};
TEXT_MENU_ menu [ 5 ] = { 
						  TEXT_MENU_("   Load     ",true,0,0),
						  TEXT_MENU_("   Save     ",false,0,1),
						  TEXT_MENU_("   Search   ",false,0,2),
						  TEXT_MENU_("   Print    ",false,0,3),
						  TEXT_MENU_("   Exit     ",false,0,4) 
						};

void SetColorBgText( short Bg = 0 , short Text = 15 );
void SetActiveMenu( ) ;
void PrintMenu ( ) ;





void main()
{
	enum VKey { MVK_UP = 72 , MVK_LEFT = 75 , MVK_RIGHT = 77 , MVK_DOWN = 80 };
	enum { STOP_IT_UP = 0 , STOP_IT_DOWN = 4 };

  int ch = 0;
  for(;;)
  {
		//обработка ввода
		if(kbhit())
		{
		  ch = getch();
		  if ( ch == 13 )
		  {
			  if( posionITR == 0 ) //"Load"
			  { system( "cls" ); cout << "Load " ; getch(); }
			  if( posionITR == 1 ) //"Save"
			  { system( "cls" ); cout << "Save " ; getch(); }
			  if( posionITR == 2 ) //"Search"
			  { system( "cls" ); cout << "Search " ; getch(); }
			  if( posionITR == 3 ) //"Print"
			  { system( "cls" ); cout << "Print " ; getch(); }
			  if( posionITR == 4 ) //"Exit"
				  break;
		  }
		  
		  if(ch==27)
			break;
		  if(ch=='p')
		   cout<<" PAUSE "<<endl;
		  if(ch==0xe0)
		  {
			ch = getch();
			switch(ch)
			{
			case MVK_LEFT:
				{
					//cout<<" LEFT "<<endl;
				}
				break;
			case MVK_RIGHT:
				{
					//cout<<" RIGHT "<<endl;
				}
				break;
			case MVK_UP:
				{
					if ( posionITR != STOP_IT_UP )
					{
						posionITR--;
					}
					//cout<<" UP "<<endl;
				}
				break;
			case MVK_DOWN:
				{
					if ( posionITR != STOP_IT_DOWN )
					{
						posionITR++;
					}
					//cout<<" DOWN "<<endl;
				}
			  break;
			}
		  }
		}
		//////////////////////////////////////
		PrintMenu ();
		cout.flush();
		Sleep( 50 );
		//////////////////////////////////////

	}
}



void PrintMenu ( ) 
{
	SetActiveMenu( ) ;
	for ( int i = 0 ; i < menu_size ; i++ ) menu [ i ].PrintTextMenu ( );
}
void SetActiveMenu( )
{
	for ( int i = 0 ; i < menu_size ; i++ ) menu [ i ].activ = false ;
	menu [ posionITR ].activ = true ;
}
выводит на экран меню, никак не могу придумать как в пункт "Search" вставить вложеное меню, типа "по Номеру", "по фамилии" и "выход в предыдущее меню" может кто подскажет?

Последний раз редактировалось Sazary; 30.06.2009 в 02:32.
DotCom вне форума Ответить с цитированием
Старый 29.06.2009, 22:08   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Ну что мешает сделать еще один объект submenu? я бы переписал структуру TEXT_MENU в класс TEXT_MENU, чтобы все методы и переменные хранились в одном месте. и можно будет создать сколько угодно таких меню
vvviperrr вне форума Ответить с цитированием
Старый 29.06.2009, 23:06   #3
DotCom
Новичок
Джуниор
 
Регистрация: 19.06.2009
Сообщений: 2
По умолчанию

в том то и дело, что не хотелось бы исспользовать классы (типа мы их еще не знаем)
DotCom вне форума Ответить с цитированием
Старый 30.06.2009, 01:02   #4
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

ха, а структура с методами это не класс?))))

если на си яб сделал к примеру структуру - строка, из нее - связанный список - меню (можно и статический массив). + функции, которые будут принимать указатель на массив-меню, чтобы они могли работать не с одной менюшкой, а с любым набором. у тебя же уже все есть, надо просто по-нормальному это оформить)

Последний раз редактировалось vvviperrr; 30.06.2009 в 01:05.
vvviperrr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си++ Как создать меню? vadima Помощь студентам 4 30.04.2009 14:56
Необходимо создать окно с меню на С++ Paul_AG Общие вопросы C/C++ 0 12.04.2009 16:55
как создать меню????? Paul_AG Общие вопросы C/C++ 1 12.04.2009 13:50
как создать меню в CSS? Ulan HTML и CSS 7 08.10.2008 10:01
Как создать консольное меню на Си DIIT Помощь студентам 1 01.12.2007 05:30