begin process at 2012 05 28 21:51:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Comment utiliser les classes avec les boites de dialogue ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment utiliser les classes avec les boites de dialogue ?

mardi 17 février 2004 à 14:15:05 | Comment utiliser les classes avec les boites de dialogue ?

alain34270

Bonjour,

j'ai écrit une classe qui contient une boite de dialogue.

Je veux utiliser la fonction DialogBox pour afficher ma boite de dialogue, associée à une procédure de traitement des messages de cette boite qui est, en fait, une méthode de ma classe.
Or, le compilateur (vc++ 6) refuse la procédure, car il ne la reconnait pas comme ayant la forme attendue :
BoiteDialogue.cpp(61) : error C2440: 'type cast' : cannot convert from '' to 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
None of the functions with this name in scope match the target type

Il faudrait que je la place à l'extérieur de la classe, mais à ce moment-là, il ne me sert plus à grand-chose d'écrire une classe pour gérer ma boite de dialogue.

Quelqu'un aurait-il une solution ?
merci d'avance.

alain
mardi 17 février 2004 à 19:18:59 | Re : Comment utiliser les classes avec les boites de dialogue ?

ymca2003

la DlgProc doit être une fonction statique.

lors de la création de la boîte de dialogue, tu fait un DialogBoxParam et tu refile un pointeur sur ton objet contennant le dialogue comme dernier paramètre

au début de la dlgproc, tu associe ton pointeur à ton handle :
if(uMsg == WM_INITDIALOG)
SetWindowLong(hDlg, GWL_USERDATA, lParam);

puis pour les autres messages, tu le récupère et tu traite avec des méthodes de la classes :
// récupération objet TDlgAbout associé à la boîte de dialogue
TDlgAbout* pDlg = (TDlgAbout*) GetWindowLong(hDlg, GWL_USERDATA);
if(!pDlg)
return 0;

ex :DlgAbout.h


//************************************************
// Classe TDlgAbout.
//************************************************
class TDlgAbout
{
//==========================================
// Membres protégés.
//==========================================
protected :

// handle de la boîte de dialogue
HWND m_hDlg;

//==========================================
// Membres publics.
//==========================================
public :
// constructeur, destructeur
TDlgAbout();
~TDlgAbout();

// création boîte de dialogue
int Create(HWND hWndParent);

//==========================================
// Procédures de traitement des messages.
//==========================================
protected :
static int CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

int MsgInitDialog(HWND, WPARAM, LPARAM); // WM_INITDIALOG
int MsgCommand(WPARAM, LPARAM); // WM_COMMAND
};


#endif // DLGABOUT_H_INCLUDED



DlgAbout.cpp :


//************************************************
// Constructeur.
//************************************************
TDlgAbout::TDlgAbout()
{
// initialisation des paramètres
m_hDlg = NULL;
}


//************************************************
// Destructeur.
//************************************************
TDlgAbout::~TDlgAbout()
{
}


//************************************************
// Create : ouverture de la boîte de dialogue "A propos de".
// entrée : hWndParent : fenêtre parente.
// retour : code de retour de la fonction DialogBoxParam.
//************************************************
int TDlgAbout::Create(HWND hWndParent)
{
// création de la boîte de dialogue
return DialogBoxParam(g_hAppInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), hWndParent,
TDlgAbout::DlgProc, (LPARAM) this);
}


//==========================================
// Traitement des messages.
//==========================================

//************************************************
// DlgProc : procédure de traitement des messages de la boîte de dialogue.
// entrée : hDlg : handle de la boîte de dialogue.
// uMsg : message à traiter.
// wParam : premier paramètre du message.
// lParam : second paramètre du message.
// retour : dépend du message à traiter.
//************************************************
int CALLBACK TDlgAbout::DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// affecter l'objet TDlgAbout lors de la création de la boîte de dialogue,
// contenu dans lParam
if(uMsg == WM_INITDIALOG)
SetWindowLong(hDlg, GWL_USERDATA, lParam);

// récupération objet TDlgAbout associé à la boîte de dialogue
TDlgAbout* pDlg = (TDlgAbout*) GetWindowLong(hDlg, GWL_USERDATA);
if(!pDlg)
return 0;

// en fonction du message
switch(uMsg)
{
case WM_INITDIALOG : return pDlg->MsgInitDialog (hDlg, wParam, lParam);
case WM_COMMAND : return pDlg->MsgCommand (wParam, lParam);
default : return 0;
}
}


//************************************************
// MsgInitDialog : traitement du message WM_INITDIALOG. Initialisation de la boîte de
// dialogue.
// entrée : hDlg : handle de la boîte de dialogue.
// wParam : premier paramètre du message.
// lParam : second paramètre du message.
// retour : vrai.
//************************************************
int TDlgAbout::MsgInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
// sauvegarde handlem_hDlg = hDlg;

// retour
return TRUE;
}


//************************************************
// MsgCommand : traitement du message WM_COMMAND. Action sur un des contrôles de la
// boîte de dialogue.
// entrée : wParam : premier paramètre du message.
// lParam : second paramètre du message.
// retour : vrai si la commane a été traitée, faux sinon..
//************************************************
int TDlgAbout::MsgCommand(WPARAM wParam, LPARAM lParam)
{
// récupération des paramètres
int nIDCtl = LOWORD(wParam);

// en fonction de l'Id du contrôle
switch(nIDCtl)
{
case IDOK : EndDialog(m_hDlg, IDOK); break;
case IDCANCEL : EndDialog(m_hDlg, IDCANCEL); break;
default : return FALSE;
}

// la commande a été traitée
return TRUE;
}
mardi 17 février 2004 à 20:25:52 | Re : Comment utiliser les classes avec les boites de dialogue ?

alain34270

Merci beaucoup pour ta réponse aussi complète !

a+
alain


Cette discussion est classée dans : int, utiliser, boite, classe, dialogue


Répondre à ce message

Sujets en rapport avec ce message

Help !!! Probleme de Boite de Dialogue dans une toolbar ie [ par Stephcoet ] Je suis en train de développer un pluggin sous Internet Explorer permettant d'afficher une barre d'outil par laquelle différentes actions seront lancé Comment exporter une classe avec sa boite de dialogue ? [ par marcel6566 ] Bonsoir,J'utilse VC++6 - MFC.J'ai réalisé un programme contenant plusieurs boites de dialogues avec leurs classes. Je souhaiterais récupérer une de ce Construire une boite de dialogue [ par NairodDorian ] Bonjour,Je me pose une question sur la construction de mes boites de dialogue, en effet, je construis ces dernieres en utilisant DialogBoxParam sans " Transfert data entre boite de dialogue [ par eklouste ] salutJe travaille en MFC et j'aimerai utiliser une donnée rentrée dans une première boite dedialogue et l'utiliser (ou dans un premier temps l'affiche récupération du handle d'une boite de dialogue [ par sunvi ] Bonjour, je cherche à récupérer le handle d'une boite de dialogue pour la manipuler. je connais son titre et sa classe grace à spy++, voilà le code qu Ouvrir une boîte de dialogue [ par moongui ] Bonjour, je programme sous visual studio 2008. J'aimerais, lorsque je clique sur un bouton, afficher une boîte de dialogue(que j'ai déjà créée, en initialiser boite de dialogue [ par salma2011 ] Salam tt le monde;je veux savoir comment je peux vider ma boite de dialogue en vc++.j'ai un menu attaché a ma boite de dialogue et j'affiche des image Aide sur les classes [ par mouadsa ] Bonsoir, J'ai un programmes en c++ où je dois créer une classe compte et puis créer n comptes (tableau dynamique), les afficher tous et saisir leurs p boite de dialogue choix source vidéo (webcam n°1, n°2, carte entrée vidéo, TV...) [ par claudiusenshortus ] Bonjour,Au sujet des webcams:Comment régler de façon automatique la boite de dialogue pour choisir la source ?J'ai en effet plusieurs caméras USB et u problème lecture variable de classe dans un singleton [ par totoscill ] Bonjour, Je rencontre un problème pour lire une variable statique de ma classe singleton "model". En effet dans cette classe, je declare: .h: public


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales