begin process at 2012 05 30 17:54:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

Sous classement foireux


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

Sous classement foireux

dimanche 12 février 2006 à 16:19:40 | Sous classement foireux

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 le code :

//Déclaré dans la zone "public" de ma classe TForm1.
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

//Handle de l'ancienne procédure de traitement des messages, déclaré en global.
long int hWndProc;

//Déclaré à l'initialisation de ma Form.
hWndProc = SetWindowLong(Application->Handle, GWL_WNDPROC, (LONG)WindowProc);

LRESULT CALLBACK TForm1::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        switch (uMsg)
        {
                case WM_MOVING :
                        return 0;
                default :
                        return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
}

Je ne reçoit jamais le WM_MOVING quand je déplace ma fenêtre, voici le log du paramètre uMsg une fois le sous classement activé :
70, 71, 70, 70, 28, 127, 127, 127

dimanche 12 février 2006 à 17:38:46 | Re : Sous classement foireux

aardman

Membre Club
Salut,
Tu ne devrais pas appeler DefWindowProc dans ta procedure, mais appeler la WndProc suivante (c'est a dire: appeler  hWndProc avec CallWindowProc()).
mercredi 15 février 2006 à 19:42:21 | Re : Sous classement foireux

HeavenForsaker

Merci aardman pour ta réponse, j'ai modifié le code mais j'ai encore un problème, voici le nouveau code :

//Déclaration dans la section Private de la class TForm1.
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static WNDPROC WndProc;

//Code à l'initialisation de ma Form.
WndProc = (WNDPROC)SetWindowLong(Application->Handle, GWL_WNDPROC, (LONG)WindowProc);

//La nouvelle fonction de traitement des messages de la fenêtre.
LRESULT CALLBACK TForm1::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        Form1->RichEdit1->Text = Form1->RichEdit1->Text + uMsg + "\r\n";
        switch (uMsg)
        {
                case WM_MOVING :
                        return 0;
                default :
                        return CallWindowProc(WndProc, hwnd, uMsg, wParam, lParam);
        }
}

J'obtiens les erreurs suivantes :
[C++ Error] Unit1.cpp(277): E2034 Cannot convert 'long (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(277): E2342 Type mismatch in parameter 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(void *,unsigned int,unsigned int,long)')

C'est peut être une erreur du a la porté des variables, je suis pas très a l'aise avec cette notion.
Quand on déclare une variable dans la section private d'une class comme c'est le cas ici, elle est visible uniquement dans cette class, et quand on déclare une variable dans la section public de cette class, elle est visible à l'exterieur de la class, je me trompe ?
Quand à la notion "static" ça veux dire que la variable ne peut être modifiée, on passe en fait une copie de la variable ? j'aimerai des explications parce que je suis paumé...


Cette discussion est classée dans : classement, hwnd, wparam, lparam, umsg


Répondre à ce message

Sujets en rapport avec ce message

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. transcodage arabe anglais [ par elmarokinho ] bonjour, je suis en DUT 2e année ... je dois réaliser un projet pr la mi-mars  ;:realisation d'un logiciel de transcodage anglais/arabe ...<br Je trouve pas le bon code [ par vah bi ] Bonjour à tous , voilà je débute en c et comme editeur j'ai le visual c++.Je  fais actuellement une application avec l'api de visual c++  mais en lang Comment faire pour re_afficher un dialogue apres "RedrawWindow" API sous DEV cpp [ par LouisJean ] louisjean dev cpp Bonjours a tous!Comment faire pour remontrer le dialogue "Mon_DIALOG" en API wind32 sous DEV Créer sa classe OpenGL [problème pointeur de fonction membre] [ par Mickatronic ] Bonjour, je réalise un projet tutauré en C++, dans ce projet je dois créer une classe qui va me permettre de généré la fenêtre OpenGl. Comme je savais souci bouton C++ [ par Tom56340 ] bonjours voila j'ai un couci l'or de mon compile run j'ai mi un bouton donnée un non ect.. donner une valuer a ID_BOUTON "1"; mais cela ne marche 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 API Windows [ par laetitiavincent ] Bonsoir tout le mondeJ'ai testé un petit prog qui à la fermeture de session doit lancer un exe. Quelqu'un saurait pourquoi il n'attend pas que l'exe s 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


Nos sponsors


Sondage...

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

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