IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Subclasser correctement un controle


Sujet :

Windows

  1. #1
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut Subclasser correctement un controle
    Bonjour à tous,
    En cherchant dans le SDK j'ai remarqué que ce n'était peut-être pas aussi simple que je le pensais de subclasser un controle.
    De un, ils disent que la fonction SetWindowLong est deprecated et qu'il vaut mieux utiliser SetWindowLongPtr.
    De deux, il existe 2 index : GWLP_WNDPROC et DWLP_DLGPROC. Je sais qu'une dialog n'est pas vraiment une fenêtre mais au final je ne vois pas la différence entre ces 2 index.
    De trois, j'ai vu dans une source du SDK qu'ils restauraient la procédure initiale du controle subclassé à la fermeture de la fenêtre.

    Comment faut-il s'y prendre pour subclasser correctement et proprement un controle?

    Merci d'avance,
    Crisanar

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut Re: Subclasser correctement un controle
    Citation Envoyé par Crisanar
    Bonjour à tous,
    En cherchant dans le SDK j'ai remarqué que ce n'était peut-être pas aussi simple que je le pensais de subclasser un controle.
    De un, ils disent que la fonction SetWindowLong est deprecated et qu'il vaut mieux utiliser SetWindowLongPtr.
    En effet, pour la compatibilité Win64. En mode 64bits, un LONG n'a pas la même taille qu'un pointeur (qui a la taille d'un LONGLONG)

    De deux, il existe 2 index : GWLP_WNDPROC et DWLP_DLGPROC. Je sais qu'une dialog n'est pas vraiment une fenêtre mais au final je ne vois pas la différence entre ces 2 index.
    Les boites de dialogue ont comme WNDPROC une fonction appelée DefDlgProc(). Cette fonction appelle la DLGPROC, et traite elle-même le message si celle-ci a retourné FALSE.
    Il est possible d'utiliser une autre WNDPROC que DefDlgProc(), généralement celle-ci appelle DefDlgProc() au lieu de DefWindowProc().

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 73
    Points
    73
    Par défaut
    De trois, j'ai vu dans une source du SDK qu'ils restauraient la procédure initiale du controle subclassé à la fermeture de la fenêtre.
    Si la fenêtre est simplement fermée et pourra être réouverte, il n'y a pas lieu de restaurer la procédure parce que la nouvelle servira encore. Puis si la fenêtre est détruite, il n'y a pas lieu non plus de restaurer la procédure parce qu'elle ne sera plus appelée à partir de cette fenêtre de toute façon.


    Une fenêtre ordinaire a une seule procédure de traitement des messages alors qu'une boîte de dialogue en a deux. Dans ce cas, la première procédure (qui est équivalente à celle d'une fenêtre standard) appelle la seconde pour lui laisser traiter certains messages. La structure de la fenêtre contient donc deux pointeurs, un pour chaque procédure, d'où la nécessité de disposer de deux index.

  4. #4
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Même si dans le même programme j'ouvre et ferme la même fenêtre plusieures fois (donc que WM_INITDIALOG est appelée à chaque fois, ainsi que mon subclassing) il n'y a pas de problème? (Je ne cache pas la fenêtre, je la ferme)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 73
    Points
    73
    Par défaut
    Si ta fenêtre est détruite, le prochain subclassing sera fait pour une nouvelle fenêtre - et il doit être fait pour que ça fonctionne. Puis, la fenêtre qui est détruite, détruit aussi le pointeur que tu as placé lors du subclassing, alors il ne sera plus utilisé. Il n'y a donc pas de problème.

    La seule raison de rétablir l'ancienne procédure serait de ne plus vouloir traiter les messages avec la nouvelle procédure. Ce n'est pas normalement ce que tu veux faire.

  6. #6
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Merci à tous pour ces informations
    Je peux donc subclasser en paix

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/03/2014, 22h02
  2. [XL-2003] Controle et eventuelle correction de dates
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/03/2010, 12h17
  3. Réponses: 7
    Dernier message: 20/09/2005, 16h09
  4. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo