I don't know what to say really but here is my tabbed menu source, defiantly not the best, but I guess some people can learn from it and others can point out my errors.
EDIT: Damn I forgot the credits: *********, Stevepwns inspired me to put in structs after I saw his button source
Its colored like the steam menu(as you should have noticed ) and yes I did spell initialize wrong on the functions, hopefully I didn't forget anything, O well I'm really tired and will fix them tomorrow if i did
Picture:
In your declarations
Code:
int MenuTab, MenuMax, MenuSelection;
struct Menu
{
int MenuX;
int MenuY;
int MenuW;
int MenuH;
};
Menu Menu1;
struct Tab
{
int TabX;
int TabY;
int TabH;
int TabW;
int TabNum;
};
Tab Tabs[5];
D3DCOLOR ColBlack = D3DCOLOR_XRGB( 0, 0, 0 );
D3DCOLOR ColGreen = D3DCOLOR_XRGB( 171, 171, 171 );
D3DCOLOR ColWhite = D3DCOLOR_XRGB( 255, 255, 255 );
D3DCOLOR ColMenuBack = D3DCOLOR_XRGB( 90, 106, 81 );
D3DCOLOR ColMenuFront = D3DCOLOR_XRGB( 125, 125, 125 );
Needed functions
Code:
void DrawMyText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x+500, y+30 };
font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}//I don't remember who made this but they get credit for this function
void IntalizeMenu( int X, int Y, int W, int H)
{
Menu1.MenuX = X;
Menu1.MenuY = Y;
Menu1.MenuW = W + Menu1.MenuX;
Menu1.MenuH = H + Menu1.MenuY;
}
void IntalizeTab( int Num, int X, int Y, int W, int H )
{
Tabs[Num].TabX = X + Menu1.MenuX;
Tabs[Num].TabY = Y + Menu1.MenuY;
Tabs[Num].TabW = W;
Tabs[Num].TabH = H;
}
void DrawBox( IDirect3DDevice9 *pD3Ddev, int X, int Y, int W, int H, D3DCOLOR Color )
{
D3DRECT Rect = { X, Y, X + W, Y + H };
pD3Ddev->Clear( 1, &Rect, D3DCLEAR_TARGET, Color, 0, 0);
}
void DrawTab( IDirect3DDevice9 *pD3Ddev, int TabNum, D3DCOLOR Color )
{
DrawBox( pD3Ddev, Tabs[TabNum].TabX, Tabs[TabNum].TabY, Tabs[TabNum].TabW, Tabs[TabNum].TabH, Color);
}
void DrawMenu( IDirect3DDevice9 *pD3Ddev, D3DCOLOR ColFront, D3DCOLOR ColBack )
{
DrawBox(pD3Ddev, Menu1.MenuX - 5, Menu1.MenuY - 5, Menu1.MenuW + 10, Menu1.MenuH + 10, ColBack);
DrawBox(pD3Ddev, Menu1.MenuX, Menu1.MenuY, Menu1.MenuW, Menu1.MenuH, ColFront);
}
In Initialize
Code:
IntalizeMenu( 15, 150, 197, 10 );
IntalizeTab( 1, 5, 5, 50, 25);
IntalizeTab( 2, 56, 5, 50, 25);
IntalizeTab( 3, 107, 5, 50, 25);
IntalizeTab( 4, 158, 5, 50, 25);
TextXoff = Menu1.MenuX + 2;
Creating the menu
Present/EndScene
Code:
// I would put this into a function then call it from Present/EndScene
DrawMenu( m_pD3Ddev, ColMenuFront, ColMenuBack );
DrawTab(m_pD3Ddev, 1, ColMenuBack);
DrawTab(m_pD3Ddev, 2, ColMenuBack);
DrawTab(m_pD3Ddev, 3, ColMenuBack);
DrawTab(m_pD3Ddev, 4, ColMenuBack);
if( GetAsyncKeyState( VK_UP ) & 1 )
{
MenuSelection--;
if(MenuSelection < 0)
MenuSelection = MenuMax;
}
if( GetAsyncKeyState( VK_DOWN ) & 1 )
{
MenuSelection++;
if(MenuSelection > MenuMax)
MenuSelection = 0;
}
switch( MenuTab )
{
case 0:
MenuMax = 2;
if( GetAsyncKeyState( VK_RIGHT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab++;
if(MenuTab > 3)
MenuTab = 0;
break;
case 1:
hack1 = true;
break;
case 2:
hack2 = true;
break;
default:
break;
}
}
if( GetAsyncKeyState( VK_LEFT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab--;
if(MenuTab < 0)
MenuTab = 3;
break;
case 1:
hack1 = false;
break;
case 2:
hack2 = false;
break;
default:
break;
}
}
if (hack1){
DrawMyText( "hack 1 on", TextXoff, Menu1.MenuY + 50, ColGreen, Font3 );
if(MenuSelection==1)
DrawMyText( "hack 1 on", TextXoff, Menu1.MenuY + 50, ColWhite, Font3 );
}else{
DrawMyText( "hack 1 off", TextXoff, Menu1.MenuY + 50, ColBlack, Font3 );
if(MenuSelection==1)
DrawMyText( "hack 1 off", TextXoff, Menu1.MenuY + 50, ColWhite, Font3 );
}
if (hack2){
DrawMyText( "hack 2 on", TextXoff, Menu1.MenuY + 65, ColGreen, Font3 );
if(MenuSelection==2)
DrawMyText( "hack 2 on", TextXoff, Menu1.MenuY + 65, ColWhite, Font3 );
}else{
DrawMyText( "hack 2 off", TextXoff, Menu1.MenuY + 65, ColBlack, Font3 );
if(MenuSelection==2)
DrawMyText( "hack 2 off", TextXoff, Menu1.MenuY + 65, ColWhite, Font3 );
}
break;
case 1:
MenuMax = 0;
if( GetAsyncKeyState( VK_RIGHT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab++;
if(MenuTab > 3)
MenuTab = 0;
break;
default:
break;
}
}
if( GetAsyncKeyState( VK_LEFT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab--;
if(MenuTab < 0)
MenuTab = 3;
break;
default:
break;
}
}
break;
case 2:
MenuMax = 0;
if( GetAsyncKeyState( VK_RIGHT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab++;
if(MenuTab > 3)
MenuTab = 0;
break;
default:
break;
}
}
if( GetAsyncKeyState( VK_LEFT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab--;
if(MenuTab < 0)
MenuTab = 3;
break;
default:
break;
}
}
break;
case 3:
MenuMax = 0;
if( GetAsyncKeyState( VK_RIGHT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab++;
if(MenuTab > 3)
MenuTab = 0;
break;
default:
break;
}
}
if( GetAsyncKeyState( VK_LEFT ) & 1 )
{
switch( MenuSelection )
{
case 0:
MenuTab--;
if(MenuTab < 0)
MenuTab = 3;
break;
default:
break;
}
}
break;
default:
break;
}
if (MenuTab==0 && MenuSelection == 0){
DrawMyText( "Tab", Menu1.MenuX + 6, Menu1.MenuY + 10, ColBlack, Font3 );
}
else if (MenuTab==0){
DrawMyText( "Tab", Menu1.MenuX + 6, Menu1.MenuY + 10, ColGreen, Font3 );
}else{
DrawMyText( "Tab", Menu1.MenuX + 6, Menu1.MenuY + 10, ColWhite, Font3 );
}
if (MenuTab==1 && MenuSelection == 0){
DrawMyText( "Tab2", Menu1.MenuX + 57, Menu1.MenuY + 10, ColBlack, Font3 );
}
else if (MenuTab==1){
DrawMyText( "Tab2", Menu1.MenuX + 57, Menu1.MenuY + 10, ColGreen, Font3 );
}else{
DrawMyText( "Tab2", Menu1.MenuX + 57, Menu1.MenuY + 10, ColWhite, Font3 );
}
if (MenuTab==2 && MenuSelection == 0){
DrawMyText( "Tab3", Menu1.MenuX + 108, Menu1.MenuY + 10, ColBlack, Font3 );
}
else if (MenuTab==2){
DrawMyText( "Tab3", Menu1.MenuX + 108, Menu1.MenuY + 10, ColGreen, Font3 );
}else{
DrawMyText( "Tab3", Menu1.MenuX + 108, Menu1.MenuY + 10, ColWhite, Font3 );
}
if (MenuTab==3 && MenuSelection == 0){
DrawMyText( "Tab4", Menu1.MenuX + 159, Menu1.MenuY + 10, ColBlack, Font3 );
}
else if (MenuTab==3){
DrawMyText( "Tab4", Menu1.MenuX + 159, Menu1.MenuY + 10, ColGreen, Font3 );
}else{
DrawMyText( "Tab4", Menu1.MenuX + 159, Menu1.MenuY + 10, ColWhite, Font3 );
}
}