begin process at 2012 05 29 01:27:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

c++ API Windows : sous classement de fenetre dans une classe


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

c++ API Windows : sous classement de fenetre dans une classe

lundi 26 septembre 2005 à 21:53:06 | c++ API Windows : sous classement de fenetre dans une classe

_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 controle...
J'ai ecrit cela, mais wpOrigEditProc = (WNDPROC/SetWindowLong(hEdit,         GWL_WNDPROC, (LONG)EditProc); me change le controle en ascenseur bizarre...

//edit.h
#ifndef CEDIT_H_
#define CEDIT_H_

#include <windows.h>

class CEdit
{
    private:
        HWND hEdit;
        static LRESULT APIENTRY EditProc(HWND, UINT, WPARAM, LPARAM);
        LRESULT Ret(HWND, UINT, WPARAM, LPARAM);
        CEdit* c;
    public:
        WNDPROC wpOrigEditProc;
        CEdit(HWND,HINSTANCE);
        ~CEdit();
};
#endif


//edit.cpp
#include "edit.h"

CEdit::CEdit(HWND hwnd,HINSTANCE hinst=0)
{
    hEdit =CreateWindow("edit", "Texte non modifiable.\r\nVous ne pouvez \
que le lire.\r\nMais il garde la couleur du fond d'un contrôle d'édition actif.",
              WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,
                                           50, 50, 150, 150, hwnd, NULL, hinst, this);
            /*wpOrigEditProc = (WNDPROC)*/SetWindowLong(hEdit,
                                                   GWL_WNDPROC, (LONG)EditProc);
            c=this;
}

CEdit::~CEdit()
{
    SetWindowLong(hEdit, GWL_WNDPROC, (LONG)wpOrigEditProc);
}

LRESULT CEdit::Ret(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

LRESULT APIENTRY CEdit::EditProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (msg==WM_CREATE)
        MessageBox(0,"a","e",0);
    CEdit * pFen = (CEdit*) GetWindowLong(hwnd, GWL_USERDATA);
        if(!pFen)
                return DefWindowProc(hwnd, msg, wParam, lParam);
   return pFen->Ret(hwnd, msg, wParam, lParam);
}


J'ai surement fait n'importe quoi, si quelqu'un pourrait m'éclairer sur la chose, que je puisse le programmer proprement...

Merci

lundi 26 septembre 2005 à 22:09:37 | Re : c++ API Windows : sous classement de fenetre dans une classe

AlexMAN

Membre Club
Dans EditProc, remplace return DefWindowProc() par return CallWindowProc(). Je te signale aussi que tu ne recevras jamais WM_CREATE dans EditProc car ce message est envoyé par CreateWindow() qui est appelé avant SetWindowLong()... +2(p - n)
lundi 26 septembre 2005 à 22:15:25 | Re : c++ API Windows : sous classement de fenetre dans une classe

_Jonathan

Si je fais cela, j'ai un autre probleme : le pointeur de la procedure callback du controle edit (renvoyé par SetWindowLong)  ne peut etre utilisé dans une fonction statique... sauf si je le met en static lui aussi, mais la, j'ai une erreur de linkage...
Je suis bloquééééééé


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


Répondre à ce message

Sujets en rapport avec ce message

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 Dll Visual Aide [ par TheMaster ] Salut!j'ai un probleme, j'ai créer un logiciel permettant de visualiser des images.Les images sont stocke en ressource dans un dll.Mais je n'arrive pa 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 Gestion des evenements Win32 [ par zibo3 ] J'aimerai créer un événement appuyer sur une touche de type F3 mais cet événement doit se réaliser à chaque fois que j'appuie sur cette touche quelque erreur LNK2001 [ par biscot19 ] j'ai une erreur de LNK 2001 sur la fonction suivanteSNMPAPI_STATUS CALLBACK cbFunc (HSNMP_SESSION hSession, HWND hWnd, UINT wMsg, WPARAM wParam, 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 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 DialoBox [ par noel70 ] Voici ce que j'ai fait, mais le souci, c'est que je n'ai aucune fenetre qui s'affiche,Lors de la compilation, aucune erreur, je ne sais pas d'ou sa vi 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 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


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 : 0,655 sec (4)

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