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 :

Stokage hwnd dans cbWndExtra


Sujet :

Windows

  1. #1
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut Stokage hwnd dans cbWndExtra
    Bonjour,
    j'ai un problème pour stoquer 2 hwnd dans cbWndExtra.

    J'utilise le système multi-fenêtre MDI,
    pour pouvoir retrouver les handle de l'édit et de la status bar qu'il y a dans les fenêtres fille je mets :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    wndclass.cbWndExtra = sizeof(HWND);

    ensuite pour aller stoquer le handel de l'édit je fais :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    hWndEdit = CreateWindow("EDIT",       // nom de la classe
                            NULL,         // pas de titre
                            WS_CHILD |    // fenêtre fille
                            WS_VISIBLE |  // visible
                            WS_VSCROLL |  // avec défilement vertical
                            ES_MULTILINE, // édition sur plusieurs lignes
                            0, 0, 0, 0,   // dimension spécifiée ailleurs
                            hWnd,         // handle fenêtre parente
                            NULL,         // pas de menu
                            hInstance,    // processus propriétaire
                            NULL);        // pas de data supplémentaires
    SetWindowLong(hWnd, 0, (LONG)hWndEdit);// sauver handle de la fenêtre Edit

    temps que j'en reste la tout va bien, j'arrive a récupèrer le handle avec :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    hWndEdit = (HWND)GetWindowLong(hWnd, 0);// récupère le handle de la fenêtre Edit

    Maintenant j'aimerais sauvegarder le handle de ma status bar, et c'est la que je coince, dois-je modifier wndclass.cbWndExtra et comment utiliser GetWindowLong et SetWindowLong ?

    moi je pensais doubler la taille de cbWndExtra et avec SetWindowLong passer en 2iem paramètre la taille du handle mais quand je regarde l'aide MSDN :
    nIndex
    [in] Specifies the zero-based offset to the value to be set.
    Valid values are in the range zero through the number of bytes of extra window memory, minus the size of an integer.
    To set any other value, specify one of the following values.

    GWL_EXSTYLE
    Sets a new extended window style. For more information, see CreateWindowEx.
    ... ... ...
    DWL_USER
    Sets new extra information that is private to the application, such as handles or pointers.
    Mais je ne comprend pas cette fonction dans mon cas qui n'est pas le changement de style d'une fenètre.

    c'est donc ici que je bloque.

    Merci à celui qui pourra m'aider.

    Cordialement Gaëtan

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Normalement, tu peux doubler la taille et passer sizeof() de tout ce qu'il y a avant en tant qu'argument.

    Mais je conseillerais plutôt de sauvegarder juste un pointeur de structure avec SetWindowLong(), et de mettre tout ce qu'il faut dans ladite structure...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Merci c'est une très bonne idée,
    je m'étais aiguiller sur l'autre voie car c'est ce que notre prof nous avait dit,
    mais comme il n'a pas mit de specification sur cette partie du projet je vais suivre ton conseil qui est bien plus simple a comprendre.

    encore merci

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Normalement, tu peux doubler la taille et passer sizeof() de tout ce qu'il y a avant en tant qu'argument.

    Mais je conseillerais plutôt de sauvegarder juste un pointeur de structure avec SetWindowLong(), et de mettre tout ce qu'il faut dans ladite structure...
    Donc après avoir tester cette solution je me suis apercu que ce n'étais pas viable car à chaque fois que l'on crée une fenêtre fille dans la MDI ca libère la structure de la fenêtre précédente, ce qui fait que je perd le handle de ma fenêtre édit et de la status bar.

    j'ai encore essayer de doublé la taille de cbWndExtra comme suit :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    wndclass.cbWndExtra = sizeof(HWND)*2;

    je sauvegarde mon 1er handle (marche) :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowLong(hWnd, 0, (LONG)hWndEdit);// sauver handle de la fenêtre Edit

    Mais pour le deuxième je n'ai aucune idée,
    j'ai bien essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowLong(hWnd, sizeof(HWND)+1, (LONG)hWndStatusBar);
    mais je suis sur que je suis sur la mauvaise voie, surtout quand je regarde l'aide :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LONG SetWindowLong(      
        HWND hWnd,
        int nIndex,
        LONG dwNewLong
    );
    nIndex [ in ] :
    Specifies the zero-based offset to the value to be set.
    Valid values are in the range zero through the number of bytes of extra window memory, minus the size of an integer.
    J'ai du mal a comprendre le passage en gras.

    Donc si quelqu'un savait me donner plus d'info sur le fonctionnement de SetWindowLong ca me ferais grandement plaisir.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Donc après avoir tester cette solution je me suis apercu que ce n'étais pas viable car à chaque fois que l'on crée une fenêtre fille dans la MDI ca libère la structure de la fenêtre précédente, ce qui fait que je perd le handle de ma fenêtre édit et de la status bar.
    Pas normal. Ou bien, je n'ai pas exactement compris ce que tu cherches à faire...

    Pour SetWindowLong: Le premier est à 0, le second à sizeof(HWND).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Je vais essayer avec le 2iem à sizeof(HWND).
    si tu veux je t'envoie mes sources pour que tu comprennes mieux car c'est pas évident à bien expliquer comme ca...

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il me faudrait plutôt un schéma indiquant les différentes fenêtres, fenêtres filles, et où sur lesquelles tu fais tes SetWindowLong()...

    Par exemple, un bête schéma sous Paint, sauvegardé en GIF ou PNG (surtout pas JPEG) et uploadé grâce à l'option pièces jointes du forum...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    EDITER :

    Tu as bien résolut le problème,
    il suffisais de mettre sizeof(HWND) et ca marche.
    Je ne sais pas pourquoi je cherchais plus loin en voulant mettre +1.
    De plus l'aide m'a complètement perdu en disant qu'il fallait enlevé la taille d'un entier...

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

Discussions similaires

  1. 3d dans un HWND Button ou autre
    Par yann458 dans le forum OpenGL
    Réponses: 5
    Dernier message: 08/11/2011, 10h12
  2. Stokage des BLOB dans oracle9i
    Par amine1980 dans le forum Débuter
    Réponses: 1
    Dernier message: 23/12/2008, 11h52
  3. stokage de la valeur d'un select dans une variable .
    Par Halloula dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/01/2008, 11h46
  4. Réponses: 9
    Dernier message: 12/09/2005, 13h24
  5. impossible d'utiliser un HWND parent dans un thread
    Par sylvain114d dans le forum Windows
    Réponses: 12
    Dernier message: 23/09/2004, 12h21

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