2010-11-29 7 views
2

J'ai quelques questions sur ce sujet.
J'ai créé une classe pour les boutons, la classe a un problème.
Problème est:
1. Je veux créer la fonction à appeler si le bouton est cliqué, le problème est que chaque bouton va faire quelque chose de différent si on cliquait dessus. Donc, je ne sais pas comment je peux créer une fonction qui fera quelque chose de différent pour chaque bouton.
Je ne sais pas comment je devrais concevoir mon interface.
Si vous pouvez me donner une idée sur la façon dont je devrais concevoir mon interface graphique, ce serait génial.
Ceci est mon bouton classeC++ Comment créer une interface graphique en directx?

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 est-ce possible?
Je crée deux fonctions et, plus que je ne le fais, pointe une fonction sur une autre.
Quelque chose comme ça

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

EDIT 3:
Ok dois-je utiliser cette façon pour la fonction onClick().

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

je passe une fonction à OnClick qu'elle appelle la fonction.
devrais-je utiliser de cette façon?

+0

Si vous êtes déjà sur une plate-forme Microsoft, pourquoi ne pas utiliser Windows Presentation Foundation? – chrisaycock

+0

Parce que, en plein écran DirectX vous ne pouvez pas utiliser Windows Presentation Foundation – Ramilol

+0

Ce que vous avez écrit comme votre 2ème édition n'est pas possible. Mais vous pouvez utiliser des pointeurs de fonction. Mais sérieusement, l'utilisation de classes/polymorphisme est meilleure, plus sûre et plus élégante, et vous apprendrez plus en le faisant de cette façon :) – Lagerbaer

Répondre

3

Utiliser l'héritage/polymorphisme: La classe de base est GUIButtons, et chaque nouveau bouton individuel dérive de cette clase de base:

class MyButton : public GUIButtons { ... } 

Et puis la fonctionnalité d'un clic vient dans une méthode virtuelle onClick() ou autre.

Plus de détails:

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 
    } 
}; 
+0

Je suis confus .. Alors disons que j'ai créé deux boutons. Si vous cliquez sur le premier bouton, la fenêtre devrait se fermer, si vous cliquez sur le second bouton, la boîte aux lettres devrait apparaître. Comment je suis supposé faire cela avec une fonction? – Ramilol

+0

J'ai édité ma réponse. Comme une alternative très simple (mais pas aussi puissante) vous pouvez avoir une variable enum pour l'action du bouton (CLOSE, MESSAGE, NEW_GAME, ...) et ensuite utiliser une instruction switch dans la fonction qui est appelée quand le bouton a été cliqué. – Lagerbaer

+0

Avoir une définition de OnClick() pour chaque scénario n'est pas le travail de la bibliothèque GUI. La bibliothèque doit fournir une interface pour que l'application qui utilise les widgets puisse le gérer comme elle le souhaite. – yasouser

1

cliquez Button est une action/événement. Vous pouvez encapsuler l'action de clic en tant que classe. Cette action est interprétée et utilisée différemment par l'application qui utilise le widget bouton. La bibliothèque gui doit notifier qu'un bouton a été cliqué avec les informations pertinentes. Vous pouvez vous référer aux bibliothèques GUI populaires comme Qt ou Gtk + comme exemples pour savoir comment ils implémentent les événements GUI et bien plus encore.

Questions connexes