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

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Mélange entre C++ et Win32


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

Mélange entre C++ et Win32

vendredi 20 août 2004 à 20:26:07 | Mélange entre C++ et Win32

vecchio56

Administrateur CodeS-SourceS
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 utilisant une fonction qui fait partie de la classe. Voici un code qui n'a pas de sens mais qui illustre ce probleme:


#include <windows.h>

class c
{
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void f();
};

LRESULT CALLBACK c::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

LRESULT CALLBACK WndProc2(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

void c::f()
{
HWND hWnd;
WNDPROC NewProc = (WNDPROC)(LONG_PTR)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG)(LONG_PTR)WndProc2); // OK
NewProc = (WNDPROC)(LONG_PTR)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG)(LONG_PTR)WndProc); //Mache pas
}

int main (int argc, char **argv)
{
return 0;
}
vendredi 20 août 2004 à 21:29:49 | Re : Mélange entre C++ et Win32

djl

ca compile et ca marche pas ?
vendredi 20 août 2004 à 21:36:37 | Re : Mélange entre C++ et Win32

vecchio56

Administrateur CodeS-SourceS
ca compile pas
vendredi 20 août 2004 à 21:39:50 | Re : Mélange entre C++ et Win32

djl

il te fais chier avec le WndProc en parametre ? peut etre un cast explicite ?
vendredi 20 août 2004 à 21:40:31 | Re : Mélange entre C++ et Win32

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
windProc doit etre declaree 'static' dans une classe pour que son adresse soit connue a la compilation, serait pas ça ton prob ?

ciao...
BruNews, Admin CS, MVP Visual C++
vendredi 20 août 2004 à 21:42:25 | Re : Mélange entre C++ et Win32

djl

tout a fais, j'avais meme pas vu, bien joué
vendredi 20 août 2004 à 21:49:38 | Re : Mélange entre C++ et Win32

vecchio56

Administrateur CodeS-SourceS
Bravo, mais ca ne m'arrange pas de mettre la fonction en static
vendredi 20 août 2004 à 21:51:08 | Re : Mélange entre C++ et Win32

djl

pourquoi, tu voudrais t'en servir comment ?
vendredi 20 août 2004 à 22:42:59 | Re : Mélange entre C++ et Win32

jpthomasset

Salut,

Si tu veux profiter des avantages des classes pour cette fonction, il faut noter une chose : En c++, quand tu appele une fonction d'une classe, elle prend en premier parametre le fameux pointeur 'this', ce qui permet lors de l'execution de savoir dans quelle instance la fonction est executé.
Ce parametre est entierement géré par le compilateur, mais il faut savoir qu'il existe. Par contre en déclarant ta fonction en static, alors ce pointeur n'existe pas puisque la fonction n'est pas éxécuté dans le contexte d'une instance de classe, mais un peu comme une fonction C classique.

Bon, pou résoudre ton problème, c'est assez simple il suffit de creer une fonction WindowProc Statique qui s'occupera de retrouver l'instance de la classe a laquelle correspond ta fenetre et appelera le traitement souhaité. Pour retrouver l'instance de ta classe, il suffit de placer le pointeur de cette classe dans le USER_DATA de la fenetre.

Bon l'explication commence a etre longue... regarde plutot ce lien qui est beaucoup plus clair : WindowProc As Class method

A ta place, je jetterais un oeil sur les MFC ou wxWindows, ca t'eviteras de refaire ce que qq'un a déjà fait

A+,
JP.


Cette discussion est classée dans : long, hwnd, wparam, wndproc, lparam


Répondre à ce message

Sujets en rapport avec ce message

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 Win32 problème. [ par TeniX ] Salut, Voila j'ai crée de maniere simple une source qui exprime mon problème , je trouve pas la source du problème , enfaite quand les fenêtres sont l Sous classement foireux [ par HeavenForsaker ] Mon sous classement n'a pas l'air de fonctionner correctement, je voudrais receptionner le message WM_MOVING lors du déplacement de ma fenêtre. Voila 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 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 SubClassing et classes [ par 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 Combox me bloquant l'appli [ par SnOOpss ] Bonjour j'ai essayé de simplifier au maximum mon code mais meme codé comme cela j'ai le meme probleme. Tant que je clique par sur le comboBox tout est Boite de dialogue [ par bioopovega ] Bonjour,J'ai un petit probleme, quand je créer une boite de dialogue dans le fichier main.cpp, je n'est pas d'erreur, mais quand je veux inclure la cr Problème sous-classement [ par Albanderuaz ] Bonjour !J'ai un petit problème avec ce code qui est censé, grâce à un sous-classement, modifier le texte de tous les boutons grâce à un hook global.


Nos sponsors


Sondage...

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,390 sec (3)

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