Ramilol
Ramilol

Reputation: 3462

C++ How to make a GUI in directx?

I have few questions on this Subjects.
I created a class for buttons, the class has problem.
Problem is:
1. I wanna create function to be called if button is clicked, the problem is that every single button gonna do different thing if it was clicked. So i don't know how i can create function that will do different thing for every button.
I have no idea how i should design my interface.
If you can give me an idea on how i should design my GUI that would be great.
This is my button class

class GUIButtons
{
public:
    GUIButtons(void);
    ~GUIButtons(void);
    void LoadMesh(string fileName, int startAnimation, LPDIRECT3DDEVICE9 d3ddev);
    void Render(float timeElapsed, D3DXMATRIX *matWorld);
    void EventProc(HWND hWnd, UINT msg, LPDIRECT3DDEVICE9 d3ddev);
    void Picking(HWND hWnd, LPDIRECT3DDEVICE9 d3ddev);
private:
    CXFileEntity *Button;
};

EDIT 2:
Guys is this possible?
I create two functions and than ill point one function to another.
Something like this

void a()
{
     ....
}
void b() = a;

EDIT 3:
Ok should i use this way for the onClick() function.

void Onclick( void(*fun) )
{
    fun();
}

i pass a function to OnClick than it calls the function.
should i use this way?

Upvotes: 2

Views: 5541

Answers (3)

Edward83
Edward83

Reputation: 6686

I recommend you the book "DirectX 9 User Interfaces: Design and Implementation". I have it and i may say that you'll find there everything what you need!!!;)

Upvotes: 1

cadolphs
cadolphs

Reputation: 9617

Use inheritance/polymorphism: The base class is GUIButtons, and every new individual button derives from that base clase:

class MyButton : public GUIButtons { ... }

And then the functionality for a click comes in a virtual method onClick() or whatever.

More detail:

class GUIButtons 
{
   ... \\ lots of stuff
   virtual void onClick() { };
};

class CloseButton : public GUIButtons
{
  ...
  virtual void onClick()
  {
    //code to close window
  }
};

class SettingsButton : public GUIButtons
{
  ...
  virtual void onClick()
  {
    //stuff to open settings menu
  }
};

Upvotes: 3

yasouser
yasouser

Reputation: 5177

Button click is an action/event. You can encapsulate the click action as a class. This action is interpreted and used differently by the application that uses the button widget. The gui library has to notify that a button has been clicked with the relevant information. You can refer to popular GUI libraries like Qt or Gtk+ as examples to know how they implement GUI events and much more.

Upvotes: 1

Related Questions