Основное меню: Что это должно из себя представлять? Кнопки, строки или любые выдуманные элементы, при активации которых на экран выводилось бы соответствующее субменю. При этом, при нажатии на одну из кнопок, предедушее открытое субменю скрывалось.
Вариантов решения несколько: для каждого субменю завести переменную и при клике на кнопку сначало все переменные обнулять, а затем активировать переменную соответствующую нажатой кнопке. Второй вариант - использовать для э
Именно массивы я буду использовать в туториале.

Рисовать я решил кнопку примерно следущего вида:


Основная идея следующая: Рисуем прямоугольник с обводкой и текстом. При наведении на кнопку корсором цвет текста и обводки меняется, а при активации меняется цвет текста.
прототип кнопки:
Код HTML:
void  Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice);
то есть имеем указатель на структуру, указатель на текст и указатель на устройство.
Для задумки нам потребуется в фаиле cRender.cpp завести массив и две переменных типа int. Указывать их нужно в корне cRender.cpp.
Код HTML:
int Button_Mass[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
	Button_Number = 0,
	Button_Max = 0;
Так как эти переменные находятся в фаиле типа .cpp , то с помощью дерективы "extern" мы их укажим в фаиле Menu.h:
Код HTML:
extern int Button_Mass[20],
	       Button_Number;
Так же в этом фаиле, в блоке "SHOW_MENU(.....){}" мы будем обнулять переменную "Button_Number":
Код HTML:
void  cRender::SHOW_MENU(LPDIRECT3DDEVICE9  pDevice)
{



	Button_Number=0;
}
Вернемся к cRender.cpp и заполним функцию Draw_Menu_But:
Код HTML:
void  cRender::Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice)
{
	if(IsInBox(x,y,w,h))
	{	
	//если наведен курсор
		if (State_Key(VK_LBUTTON,30) )
			if (Button_Mass[Button_Number]!= 1)
				Button_Mass[Button_Number]= 1;
	}

	if (Button_Mass[Button_Number])
	{		
		//Если активна
		for ( int i = 0; i < 20; i++ )
			if ( i != Button_Number )
				Button_Mass[i] = 0;
	}
	

	Button_Number = Button_Number + 1;

	if (Button_Max < Button_Number )
		Button_Max = Button_Number;

}
Так выглядит основная рабочая часть кода.
Теперь займемся рисованием:Нам нужно завести две переменных типа D3DCOLOR для смены цвета при взаимодействии. Так же нарисовать прямоугольник, обводку и текст.
void cRender::Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice)
Код HTML:
{
	D3DCOLOR Bord_text = line_Color;
	D3DCOLOR text_Activ = line_Color;


	if(IsInBox(x,y,w,h))
	{	
                     //если наведен курсор
		Bord_text = text_Activ =Lime;
		if (State_Key(VK_LBUTTON,30) )
			if (Button_Mass[Button_Number]!= 1)
				Button_Mass[Button_Number]= 1;
	}

	Draw_GradientBox(x, y, w, h, DarkRed, BLACK,vertical , pDevice );
	Draw_Border(x, y, w, h,1,Bord_text,pDevice);
	if (Button_Mass[Button_Number])
	{		
                       //Если активна
		text_Activ = YellowGreen;
		for ( int i = 0; i < 20; i++ )
			if ( i != Button_Number )
				Button_Mass[i] = 0;
	}
	Draw_Text(x+(w/2),y+3,text_Activ, text,C_Text);

	Button_Number = Button_Number + 1;

	if (Button_Max < Button_Number )
		Button_Max = Button_Number;

}
Теперь разберемся с положением в пространстве и размерами:
заводим четыре переменных типа int:
Код HTML:
int x  ,
	   y ,
	   h,
	   w ;
И задаем им значения:
Код HTML:
int x = (*pos_Menu).x,
		y = (*pos_Menu).y,
		h = 22,
		w = 101;
x = текущее положение\значение "х"(структура)
y = текущее положение\значение "y"(структура)
w = длинна кнопки
h = ширина кнопки

Указываем это в самом начале тела функции:
Код HTML:
void  cRender::Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice)
{
	int x = (*pos_Menu).x,
		y = (*pos_Menu).y,
		h = 22,
		w = 101;
......
......
......
......
}
При таком раскладе мы уже сможем нарисовать одну кнопку, но последующие будут накладываться друг на друга, так как у нас еще не задано "смещение". Для этого в конце теля функции добавим:
Код HTML:
(*pos_Menu).y = y+24;
Итог:
Код HTML:
void  cRender::Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice)
{
	int x = (*pos_Menu).x,
		y = (*pos_Menu).y,
		h = 22,
		w = 101;
	D3DCOLOR Bord_text = line_Color;
	D3DCOLOR text_Activ = line_Color;


	if(IsInBox(x,y,w,h))
	{	
		Bord_text = text_Activ =Lime;
		if (State_Key(VK_LBUTTON,30) )
			if (Button_Mass[Button_Number]!= 1)
				Button_Mass[Button_Number]= 1;
	}

	Draw_GradientBox(x, y, w, h, DarkRed, BLACK,vertical , pDevice );
	Draw_Border(x, y, w, h,1,Bord_text,pDevice);
	if (Button_Mass[Button_Number])
	{		
		text_Activ = YellowGreen;
		for ( int i = 0; i < 20; i++ )
			if ( i != Button_Number )
				Button_Mass[i] = 0;
	}
	Draw_Text(x+(w/2),y+3,text_Activ, text,C_Text);

	Button_Number = Button_Number + 1;

	if (Button_Max < Button_Number )
		Button_Max = Button_Number;

	(*pos_Menu).y = y+24;
}
Смысл: При вызове считываем координаты со структуры -> рисуем задуманое -> записываем в структуру новые координаты.

Используем это в меню так:
Код HTML:
void  cRender::SHOW_MENU(LPDIRECT3DDEVICE9  pDevice)
{

	Draw_Menu_But(&pos_Menu,"New Button 1", pDevice);
	if(Button_Mass[0])
	{
	}

	Draw_Menu_But(&pos_Menu,"New Button 2", pDevice);
	if(Button_Mass[1])
	{
	}

	Draw_Menu_But(&pos_Menu,"New Button 3", pDevice);
	if(Button_Mass[2])
	{
	}

	Draw_Menu_But(&pos_Menu,"New Button 4", pDevice);
	if(Button_Mass[3])
	{
	}




	Button_Number=0;
}
В результате мы получаем: