begin process at 2012 05 28 12:54:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[API][WIN32] Enregistrement de classe de fenêtre


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

[API][WIN32] Enregistrement de classe de fenêtre

vendredi 28 mai 2004 à 17:50:31 | [API][WIN32] Enregistrement de classe de fenêtre

Jeffray


Bonjour,

J'ai un problème pour enregistrer une classe de fenêtre.

J'utilise GetClassInfoEx() pour extraire les infos de la classe EDIT créée par Windows.
Ensuite je modifie certains paramètres et j'essaye d'enregistrer cette classe de fenêtre.

Voici le code :


WNDCLASSEX wc;

if(GetClassInfoEx(NULL, "EDIT", &wc) != 0) {
MaFenetre->oldProc = wc.lpfnWndProc;

wc.lpfnWndProc = (WNDPROC)EdProc;
wc.lpszClassName = "MonEdit";

if( ! RegisterClassEx(&wc) ) {

... // GetLastError()

}



Lorsque je compile, pas de problème : aucun warning, aucune erreur.
Lorsque j'éxécute, GetLastError() me dit : paramètre incorrect.

Je ne peux pas faire un sous-classement classique (avec SetWindowLong) car la procédure de sous classement est une fonction membre statique d'une classe, et j'ai besoin d'accèder à un pointeur d'objet dans cette fonction.

Quelqu'un auraît une idée ?

Merci !
samedi 29 mai 2004 à 09:05:47 | Re : [API][WIN32] Enregistrement de classe de fenêtre

Jeffray


Bonjour,

Pour info : j'ai réussi à régler le problème de l'enregistrement de la classe modifiée : il suffit de définir le paramètre cbSize de la structure WNDCLASSEX avant l'appel de la fonction GetClassInfoEx() :


WNDCLASSEX wc;

wc.cbSize = sizeof(WNDCLASSEX);

if(GetClassInfoEx(NULL, "EDIT", &wc) != 0)
etc...


Et accessoirement, redéfinir aussi le paramètre hInstance de cette même structure (après l'appel de GetClassInfoEx()).

Maintenant, j'ai un autre problème : une fois cette classe enregistrée, je n'arrive pas à créer une fenêtre correspondante.
J'ai identifié le problème : il ne trouve pas ma procédure de callback Edproc, et du coup ne créé pas la fenêtre.
Si j'éxécute le code suivant :

WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);

if(GetClassInfoEx(NULL, "EDIT", &wc) != 0) {
MaFenetre->oldProc = wc.lpfnWndProc;

wc.lpszClassName = "MonEdit";
wc.lpfnWndProc = (WNDPROC)EdProc;

RegisterClassEx(&wc);
}

HWND ThehWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW,
"MonEdit",
NULL,
ES_LEFT | WS_CHILD | WS_BORDER | ES_MULTILINE,
20, 85,
430, 120,
hWnd,
(HMENU)ID_CHAINE,
hProgInstance,
0
);

if( ! ThehWnd ) {
RetourneErreur(); // GetLastError()
}


GetLastError() me retourne : "Le fichier spécifié est introuvable"
Il suffit que je mette la ligne suivante en commentaire :

wc.lpfnWndProc = (WNDPROC)EdProc;

Et plus d'erreur, l'edit est bien créé et apparraît...

La fonction EdProc est un membre statique de classe.

Help please :o)
samedi 29 mai 2004 à 13:00:15 | Re : [API][WIN32] Enregistrement de classe de fenêtre

Jeffray


Bon, je ne comprends pas... çà ne veut pas fonctionner.
C'est vraiment bizarre, d'autant plus étrange, que je fais exactement la même chose quelques lignes au dessus pour créer ma 1ère fenêtre, et çà marche.
Et la meilleure dans tout çà, c'est que j'ai trouvé des exemples sur le net qui expliquent exactement ce que je suis en train de faire (le superclassing, ou surclassement en français).
Mais non, il ne veut pas prendre en compte ma fonction EdProc.
Et çà n'a rien à voir avec le fait que ce soit une fonction membre statique, car j'ai essayé avec une fonction globale et çà fait pareil...

Si quelqu'un a une idée, là c'est le moment, car je suis à cours...
dimanche 30 mai 2004 à 18:23:41 | Re : [API][WIN32] Enregistrement de classe de fenêtre

Jeffray


Si par hasard quelqu'un tombe un jour sur ce topic, je vais donner la solution.

Après m'être arraché les cheveux une bonne centaine de fois, et après une petite restructuration de mon code, qui au passage, n'a pas fait de mal, la solution m'est venue d'un coup.

En fait je fais de la POO pure, c'est à dire sans aucune variable globale.
Il suffisait en fait de déclarer le membre oldProc de la classe en question static.
Sans cela, çà ne fonctionnait pas. Et pourtant, à la compilation çà passait nickel, aucun warning, aucune erreur. C'est à l'éxécution que çà plantait.

Voilà, merci de votre soutien :o)


Cette discussion est classée dans : code, classe, fenêtre, api, wc


Répondre à ce message

Sujets en rapport avec ce message

opengl bug [ par darmoor ] Voila je vien de debuter dans l'openGL et selon le tutorial jai fait ce qu'il falai et sa me marque une erreur:le code:#include #includ [API windows] Redimmensionner une fenêtre [ par lucelabrute ] Bonjour, j'aimerais qu'aprés selection dans une combo box, la fenêtre s'agrandisse ou se reduise automatiquement, j'ai lu un peu et j'ai trouvé SetWin Fenêtre en premier plan sans focus [ par thenaoh ] Bonjour, Je cherche depuis plusieurs jours à afficher une application de mon cru (une appli AIR) en premier plan, mais sans qu'elle prenne le focus a Polumorphisme pointeur [ par yvesyves ] Bonjour, Admettons : [code=cpp]class A { private : .... protected : void Insertapres(A * nouveau, A * source = this){.....} }; classe B Cast void* - objet C++ [ par zaraki21 ] Bonjour, Je travaille actuellement sur un projet en C/C++ dans lequel je souhaite "caster" un membre d'une classe de type void* en un pointeur sur un Tableaux... [ par pop70 ] Bonjour, Je cherche à faire un petit jeu en 2D, Celui est constitué d'une Map, sur laquelle viennent se placer toutes sortes d'objets. Chaque objet Question : Variables static/méthode static/initialisation [ par Inutqen ] Bonjour à tous, j'ai besoin d'un coup de main :) J'ai un petit soucis avec un code C++, je suppose que la réponse à ma question se trouve quelque par Pointeur vers des fonctions membres d'une classe [ par thoflo1 ] Bonjour, J'utilise une méthode d'une classe issue d'une librairie c++, qui prend un pointeur vers une fonction en argument : [code=cpp] typedef void ( Utilisation des classes [ par andrebernard ] Bonjour à tous Voila je viens de découvrir que les contrôles sont créés par la même classe que les fenêtres [^^peur] [code=cpp]WNDCLASS wc; wc.c FindWindow et nom de classe ? [ par italiasky ] Bonjour, Dans la fonction FindWindow (http://msdn.microsoft.com/en-us/library/ms633499%28VS.85%29.aspx), le premier paramètre est le nom de classe et


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

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