VGUI2: Hardcoded Controls

From Valve Developer Community
Revision as of 21:04, 13 August 2012 by Motherfat (talk | contribs) (Created page with "Category:TutorialsC {{Stub}} ==Requirements== Have read and understood (or understand):<br> *VGUI Documentation *VGUI2:_Creating_a_panel Can code: *...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Have read and understood (or understand):

Can code:

  • C++
  • Script

This tutorial is a continuation on Creating A Panel

In Half-Life 1, controls were added via code from the Server and Client libraries and is still supported by the source engine and controls can be added. There are more options for these controls to be customized rather then in RES files. This is very usefull if you do not want people to modify your panel controls via RES files.

You have the choice in-between 50 elements, individually stored in the vgui_controls folder.

First start off by adding our header file.


 //The following include files are necessary to allow your MyPanel.cpp to compile.
 #include "cbase.h"
 #include "IMyPanel.h"
 using namespace vgui;
 #include <vgui/IVGui.h>
 #include <vgui_controls/Frame.h>

 // Non RES-File Control Tutorial
 #include <vgui_controls/Button.h>
 //CMyPanel class: Tutorial example class
 class CMyPanel : public vgui::Frame
 	DECLARE_CLASS_SIMPLE(CMyPanel, vgui::Frame); 
 	//CMyPanel : This Class / vgui::Frame : BaseClass
 	CMyPanel(vgui::VPANEL parent); 	// Constructor
 	~CMyPanel(){};				// Destructor
 	//VGUI overrides:
 	virtual void OnTick();
 	virtual void OnCommand(const char* pcCommand);
 	//Other used VGUI control Elements:

        // Our Code Defined Control
        Button *m_pCloseButton;

Ok now we got our control defined, now we need to create it here but you can still have both the res file and code defined controls at the same time. We are going to be assigning a click and release sound to this button.

// Constuctor: Initializes the Panel
CMyPanel::CMyPanel(vgui::VPANEL parent) : BaseClass(NULL, "MyPanel")
	SetParent( parent );
	SetKeyBoardInputEnabled( true );
	SetMouseInputEnabled( true );
	SetProportional( false );
	SetTitleBarVisible( true );
	SetMinimizeButtonVisible( false );
	SetMaximizeButtonVisible( false );
	SetCloseButtonVisible( false );
	SetSizeable( false );
	SetMoveable( false );
	SetVisible( true );

	SetScheme(vgui::scheme()->LoadSchemeFromFile("resource/SourceScheme.res", "SourceScheme"));


	vgui::ivgui()->AddTickSignal( GetVPanel(), 100 );

 // Code Defined Control Creation
        m_pCloseButton = new Button(this, "", "Close", this, "turnoff");
        m_pCloseButton->SetPos(314, 162);