begin process at 2012 05 30 12:15:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

SubClassing et classes


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

SubClassing et classes

mardi 29 août 2006 à 18:47:39 | SubClassing et classes

SnOOpss

ReBonjour je sais pas ce qui se passe en ce moment mais depuis que je me suis mit aux classes je bloque toute les deux lignes, j'ai du sauter un trop gros paragraphe.

class MyBoutton
{

    public:
        MyBoutton();

        bool state;
        int style;
        WNDPROC ancienproc;
        int deco;

        //fonction
        void Subclass(HWND hwnd);
        LRESULT CALLBACK ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);

};

void MyBoutton::Subclass(HWND hwnd) {
    ancienproc = (WNDPROC)SetWindowLong(hwnd,GWL_WNDPROC,(long)ProcBoutton);
}

Pourquoi je me retrouve avec le message "error C2440: 'type cast' : cannot convert from 'LRESULT (__stdcall MyBoutton::* )(HWND,UINT,WPARAM,LPARAM)' to 'long'" alors que sans passer par les classes ca marche a chaque fois.
mardi 29 août 2006 à 19:17:01 | Re : SubClassing et classes

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Fonction doit être déclarée 'static'.

ciao...
BruNews, MVP VC++
mardi 29 août 2006 à 19:39:22 | Re : SubClassing et classes

SnOOpss

Je l'ai mit dans le headers pas dans le cpp( sinon pas de compil).
J'ai du aussi mettre static WNDPROC ancienproc;

Ca compile mais lors du link
error LNK2001: unresolved external symbol "public: static long (__stdcall* MyBoutton::ancienproc)(struct HWND__ *,unsigned int,unsigned int,long)" (?ancienproc@MyBoutton@@2P6GJPAUHWND__@@IIJ@ZA)

Meme si dans le header je met ma fonction en private (toujour le message "unresolved external symbol "public: .....")

La franchement je comprend plus rien, pourquoi ces statics ?
mardi 29 août 2006 à 19:50:01 | Re : SubClassing et classes

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Tu dois ajouter ceci dans le cpp:

WNDPROC MyBoutton::ancienproc;

C'est logique qu'une méthode non statique ne peut pas faire l'affaire car elle a besoin d'un objet pour être appelée, contrairement à une méthode statique

_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 29 août 2006 à 19:52:16 | Re : SubClassing et classes

SnOOpss

En fait le prb viens de ancienproc donc j'ai remit WNDPROC ancienproc; dans le header de ma classe.

mais
LRESULT CALLBACK MyBoutton::ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {

.....
....
  return CallWindowProc(ancienproc,hwnd,message,wParam,lParam);

}

L'erreur viens de la derniere ligne.

mardi 29 août 2006 à 20:00:05 | Re : SubClassing et classes

SnOOpss

Trop tard j'avait deja posté mais maintenant ca marche (enfin ca deconne a fond mais ca compile et ca linke) la je vais essayer de comprendre ce que j'ai fait car j'ai pas encore tout saisi, j'ai peur que ca deconne encore au niveau de ancienproc.

Merci en tout cas.

mardi 29 août 2006 à 20:11:57 | Re : SubClassing et classes

SnOOpss

En fait c'etait bien ca.
Vu que ancienproc est maintenant statique, je n'en ai plus qu'un dans mon appli, y a pas moyen d'acceder au valeur de ma classe.

LRESULT CALLBACK MyBoutton::ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {

this->style;

est impossible du coup.

C'est impossible avec les classes ? En fait je cherche a sous-classer en evitant de faire passer un pointeur dans GWL_USERDATA et je croyais ca possible avec les classes.
mardi 29 août 2006 à 20:38:55 | Re : SubClassing et classes

vecchio56

Administrateur CodeS-SourceS
En général, ce qu'on fait c'est mettre dans GWL_USERDATA une référence de l'objet pour pouvoir le retrouver dans la WndProc:

LRESULT CALLBACK MyBoutton::ProcBoutton(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  MyBoutton* btn = (MyBoutton*)GetWindowLongPtr(hwnd, GWL_USERDATA);
  btn->...
}

_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 29 août 2006 à 21:23:24 | Re : SubClassing et classes

SnOOpss

Ben en fait c'est justement ce que je cherche a eviter en fait le projet final sera une librairie. Je l'ai deja fini sous la forme d'une dll pour une application (mIRC) et ce systeme de sous-classement pose probleme car 95/100 des dlls utilise cette technique et donc impossible d'en utliser 2 a la fois ( si GWL_USERDATA est utilisé par une dll c'est impossible a l'autre d'en faire autant).
Ya aussi la technique d'une liste chainées qui les memorise toute mais je pensais la refaire avec les classes.

mardi 29 août 2006 à 21:33:17 | Re : SubClassing et classes

aardman

Membre Club
Salut,
Tu peux aussi utiliser SetProp() et GetProp().
C'est moins rapide que GetWindowLong(), mais c'est pratique car tu pourra associer plusieurs pointeurs à une même fenêtre. Pour rentre GetProp() un peu plus rapide, on peut aussi utiliser les atoms (msdn).

1 2

Cette discussion est classée dans : hwnd, wparam, classes, wndproc, myboutton


Répondre à ce message

Sujets en rapport avec ce message

thread sur WndProc [ par kidpigeyre ] G une fonction WndProc chargé de réaliser tout mon programme (application GUI) (avec fenetre windows) et jmerai pouvoir faire un thread de cette fonct Mélange entre C++ et Win32 [ par vecchio56 ] J'ai décidé d'encapsuler mes fenêtres dans des classes, mais je me trouve confronté à un problème: en gros je n'arrive pas à changer de WndProc en uti Où passent mes tabulations... [ par Nebula ] Bonjour, En utilisant des richedits dans une fenêtre créée avec CreateWindowEx et dont les messages sont traités avec IsDialogMessage, je me suis ape c++ API Windows : sous classement de fenetre dans une classe [ par _Jonathan ] Bonjour, je cherche à créer un controle de type Edit en utilisant une classe. Le probleme, c'est que je souhaite redéfinir la procedure callback du co Comment sortir d'une boucle avec clic sur un bouton Cancel? [ par rolanddegilead1 ] Bonjour,je suis debutant et je m'arrache les cheveux depuis presque une semaine a cause d'un truc tout bete: en gros je cree une fenetre avec 2 bouton Programmation C++ [ par spiky31 ] Bonjour Un peu de code d'abord : class A { public : LRESULT CALLBACK proc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); A() { pb avec iwebbrowser2 C++ API Win 32 [ par spyto ] Bonjour,Je tourne en rond, je ne vois pas où ça buggue !!!Voilà, j'ai développé un truc en Win32 pur (j'utilise MSVS.NET C++ 2003)J'ai emprunté une so pb affichage ComboBox dans Dialog [ par Guillemouze ] Salut tout le monde,j'ai un souci d'affichage de mon combo dans un dialog. Quand je click sur la fleche pour afficher la liste, il ne m'affiche rien!P PROBLEME DE CHARGEMENT JPEG DANS UN ECRAN DE VEILLE [ par Batman60 ] bonjourclic droit sur l'exe et puis "tester" le prog fonctionne à merveille mais une fois installé à l'execution de l'ecran de veille les textures jpe 1407 : Cannot find window class [ par nemmezis ] Salut tout le monde, Voilà, ça fait un jour que je bloque sur un problème qui m'empêche d'avancer : je crée une boîte de dialogue modale avec la fonc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 1,030 sec (3)

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