довно я не писал не чего так что погнали
Этот и последующие элементы будут всегда пренадлежать суб-меню. Поэтому что бы не замарачиваться с начальной координатой положения - допишем еще одну переменную в структуру stMenu:
Код HTML:
struct stMenu
{
int x,
y, _y;
};
так же "иницализируем ее в Init_PosMenu():
Код HTML:
void cRender::Init_PosMenu(int x,int y,DWORD KEY,stMenu* pos_Menu,IDirect3DDevice9* m_pD3Ddev)
{
(*pos_Menu).x = x;
(*pos_Menu).y = y;
(*pos_Menu)._y = y;
if( !pFont)
pFont->OnLostDevice();
else
{
if(State_Key(KEY,3000))Show=!Show;
if(Show)SHOW_MENU(m_pD3Ddev);
pFont->OnLostDevice();
pFont->OnResetDevice();
}
}
перейдем непосредственно к рисованию контрола.
Внешний вид его будет такой:

Определяем прототип в классе cRender:
Код HTML:
void Draw_CheckBox(stMenu *pos_Menu,bool &Var,char *Text,IDirect3DDevice9 *pDevice);
И описываем функцию:
Код HTML:
void cRender::Draw_CheckBox(stMenu *pos_Menu,bool &Var,char *Text,IDirect3DDevice9 *pDevice)
{
int x = (*pos_Menu).x+115,
y = (*pos_Menu)._y,
w = 16,
h = 16;
Draw_Box( x, y, w, h, 0xff305C5F,pDevice);
Draw_Border( x, y, w, h,1, line_Color,pDevice);
if(IsInBox(x,y ,w,h))
{
if (State_Key(VK_LBUTTON,300) )
Var=!Var;
}
if(Var)
Draw_GradientBox(x+3, y+3, 11, 11, DarkRed, BLACK,vertical , pDevice );
Draw_Text(x+24,y+2,line_Color, Text,L_Text);
(*pos_Menu)._y = y+20;
}
Система думаю будет ясна из предыдущего тутора.
Единственное о чем можно сказать, так это о "x = (*pos_Menu).x+115".
(*pos_Menu).x - это начальное положение меню
+115 - это цифра определяет смещение от начала.Складывается она из длинны Draw_Menu_But() + небольшое дополнение, что бы был зазор между основным меню и суб-меню.
Запись у меня в меню получилась следущая:
Код HTML:
Draw_Menu_But(&pos_Menu,"New Button 1", pDevice);
if(Button_Mass[0])
{
Draw_CheckBox(&pos_Menu,b_Fun_1,"New CheckBox 1",pDevice);
Draw_CheckBox(&pos_Menu,b_Fun_2,"New CheckBox 2",pDevice);
Draw_CheckBox(&pos_Menu,b_Fun_3,"New CheckBox 3",pDevice);
Draw_CheckBox(&pos_Menu,b_Fun_4,"New CheckBox 4",pDevice);
}