Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Sous-classement dans classe C++ [ Windows / System ] (NeoUmbrella)

jeudi 18 octobre 2007 à 22:50:48 | Sous-classement dans classe C++

NeoUmbrella

Bonjour, mon problème est le suivant :

J'aimerais sous-classer un bouton et que la procédure recevant les messages windows se trouve dans une classe. J'ai essayé plusieurs méthodes, mais pas de résultat.

Merci.
NeoUmbrella Corp. - www.NeoUmbrella.fr

vendredi 19 octobre 2007 à 17:08:34 | Re : Sous-classement dans classe C++

SnOOpss

J'ai eu le meme probleme, je me souviens plus ce que l'on m' a expliqué mais ce n'est pas possible. En fait ce sera la meme procedure qui traitera toute tes classes.
Moi je fait

LRESULT CALLBACK ProcButton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {

    MyButton * bout = (MyButton *)GetWindowLong(hwnd, GWL_USERDATA);

pour recuperer le pointeur de ma classe dans la procedure (prealablement memorisé dans GWL_USERDATA)

vendredi 19 octobre 2007 à 17:38:37 | Re : Sous-classement dans classe C++

juju12

C'est pas compliqué :
une méthode de classe est de convention d'appel __thiscall, ce qui signifie que le compilateur lui passe implicitement en premier argument un pointeur sur l'instance de la classe (devient this donc); or une WndProc est de convention __stdcall (macro CALLBACK ou WINAPI) => incompatibilité. Cela ce comprend aisément : comment voulez-vous que Windows sache que le programmeur a associé une classe à sa fenêtre et qu'il doit lui fournir un pointeur sur l'instance?

vendredi 19 octobre 2007 à 18:03:09 | Re : Sous-classement dans classe C++

NeoUmbrella

Je vois, merci pour vos réponses SnOOpss et Juju12.
En fait j'utilise déja GWL_USERDATA pour une autre donnée donc je suis dans l'impossibilité de l'utiliser dans ce contexte.
Donc cela n'est pas possible à faire, me voila fixé :)

Merci.
NeoUmbrella Corp. - www.NeoUmbrella.fr

vendredi 19 octobre 2007 à 18:42:20 | Re : Sous-classement dans classe C++

juju12

Ben si tu stockes toutes tes données dans une structure et tu passes un pointeur sur la structure en GWL_USERDATA.

samedi 20 octobre 2007 à 11:21:17 | Re : Sous-classement dans classe C++

SnOOpss

Oui, c'est exactement ce que j'ai fait
class MyButton
{

    public:
        MyButton();

        HWND hwnd;
        int id;
        short state;
        int style;
        WNDPROC ancienproc;
....

puis
MyButton * bout = new MyButton;
SetWindowLong(hwnd,GWL_USERDATA,(long)bout);

avec ce systeme tu peux passer plusieurs parametres dans GWL_USERDATA (cf une de mes sources).
Sinon il  y a d'autres moyens pour sous-classer comme SetProp();



Cette discussion est classé dans : classement, classe, neoumbrella


Répondre à ce message

Sujets en rapport avec ce message

ouverture de base Access [ par denis ] salut!voila mon probleme :j'ai cree une dll dans laquelle il y a une ouverture de base access au moyen d'une classe qui dérive de la classe CRecordset VCplusplus 6 [ par emaskaoui ] Comment je peux acceder au membre données d'une la classe à partir d'une autre classe? Merci dll pour asp avec connection odbc [ par denis ] salut!voila mon probleme :j'ai cree une dll dans laquelle il y a une ouverture de base access au moyen d'une classe qui dérive de la classe CRecordset Base de donées ADO [ par header ] Apres avoir importe la dll et tout ce qui faut pour qu'une classe générique de CADORecordBinding soit crée j'ai un problème : lorsque je commence mes AIDEZ MOI : LE DOWNLOAD AVEC la classe CHTMLVIEW [ par header ] il me faudrait un topo sur la classe CHtmlViewje ne sais pas comment faire une pause dans un telechargement...................AIDEZ MOI win32 et sous-classement [ par mozert ] hi.mmm... mwai.. voila mon probleme..le sous-classement (subclassing)..est-il possible de sous-classer une fenetre appartenant à un processus differen builder c++ 5 compile pas chez moi [ par ferrari ] voila j'ai un projet sous builder qui compilej'ai rajouter une classe perso mais lorsque je compile et que j'appelle une methode de ma classe, il me d Récupérer le Handle de l'appli [ par Stoomm ] Bonjour,Explication :J'ai une classe D3Dapp qui crée la fenetre.Dans une autre classe (qui va servir a D3Dapp), j'aimerais récupérer le handle de la f Visual c++ [ par Maxus ] Salut,j'ai un probleme sous visual c++ lorque j'execute une fonction d'une classe à partir d'une autre...Explication : dans une fenetre, j'ai une list INSTANCIER UNE CLASSE D'UNE DLL [ par KL ] Bonjour,J'ai un enorme problème !J'ai créé une DLL avec des classes dedansMaintenant je veux pouvoir importer ces classes dans un prog Win32 et pouvoi


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,140 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.