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 :

Quelques problèmes avec MDI quand plusieurs fenêtres filles


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Points : 99
    Points
    99
    Par défaut Quelques problèmes avec MDI quand plusieurs fenêtres filles
    Bonjour,
    Tout d'abord, je n'ai aucun problème lorsque je n'ai qu'une fenêtre fille, mais dès que j'en ai une deuxième je commence à avoir des mélanges.
    Dans l'exemple simplifié ci-dessous, j'ai une 1ère fenêtre fille (sommaire) qui ne contient que des contrôles statiques et des radioboutons (donc pas de WM_PAINT à traiter) et la deuxième fenêtre fille est encore plus simple puisqu'elle est pour l'instant vide.
    Les 2 fenêtres filles sont enregistrées avec une couleur de fond identique.
    Mes deux fenêtres s'affichent sur l'écran l'une sur l'autre, mais dès que j'essaie de les déplacer, j'ai des mélanges, les contrôles de la 1ère par exemple se repeignent sur la seconde ou le cadre de la seconde reste dessiné sur la 1ère.
    Par ailleurs, si je crée la seconde après avoir fait un destroy de la 1ère, la seconde n'apparaît pas.
    Enfin, il y a un cas qui marche sur lequel pour l'instant je n'ai pas trouvé de problème c'est si je crée la seconde après avoir simplement rendu la 1ère invisible.
    J'ai dû oublier quelque chose dans ma programmation ci-dessous, mais pour l'instant je ne vois pas quoi.
    Ci-dessous un extrait simplifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // *************** création de la fenêtre mère principale:
    Hdlgmain = CreateWindowEx(WS_EX_CLIENTEDGE, classmain, titremain, WS_CAPTION | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, lmain, hmain, NULL, NULL, n0inst, NULL);
    // *************** puis dans le WM_CREATE de la callback de Hdlgmain:
    css.hWindowMenu=GetSubMenu(GetMenu(Hdlgmain),0); //avec static CLIENTCREATESTRUCT css; // en début de callback
    css.idFirstChild=0;
    hMDIClient = CreateWindow("MDICLIENT", (LPCSTR)NULL, WS_CHILD | WS_HSCROLL | WS_VSCROLL | WS_CLIPCHILDREN, 0, 0, 0, 0, Hdlgmain, NULL, n0inst, (LPSTR)&css); // création MDI
    ShowWindow(hMDIClient,SW_SHOW);
    Hdlgsom = CreateWindowEx(WS_EX_CLIENTEDGE, classsom, titresom, WS_CHILD | WS_CAPTION | WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, lsom, hsom, hMDIClient, (HMENU)(INT)ID_som, n0inst, NULL);
    Hdlgvide = CreateWindowEx(WS_EX_CLIENTEDGE, classvide, titrevide, WS_CHILD | WS_CAPTION | WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, lsom, hsom, hMDIClient, (HMENU)(INT)ID_vide, n0inst, NULL);
    SetFocus(Hdlgsom);
    // *************** puis en fin de callback de Hdlgsom
    default :
    	return DefMDIChildProc( Hdlgsom, IDMsg, wParam, lParam );
    // *************** pour terminer en fin de callback de Hdlgvide
    default :
    	return DefMDIChildProc( Hdlgvide, IDMsg, wParam, lParam );
    A noter que j'ai déjà fait les essais suivants qui n'ont rien changé au phénomène:
    - comme dans CLIENTCREATESTRUCT on récupère le menu de la fenêtre principale, j'ai rajouté un menu dans la fenêtre principale.
    - comme c'est normalement la MDI qui gère l'id des fenêtres filles, dans le CreateWindow des fenêtres filles, j'ai remplacé le (HMENU)ID par NULL
    - comme la fenêtre MDI est ci-dessus créée avec des dimensions à 0,0, j'ai remplacé le 0,0 par les dimensions intérieures de la fenêtre mère (principale)
    tout ceci a donc déjà été essayé, n'a pas apporté de malfonctionnement supplémentaire, mais n'a rien amélioré non plus.
    Enfin, si personne ne trouve, je peux quand même m'en sortir en rendant simplement invisibles les fenêtres filles que je n'utilise temporairement pas.
    Pourtant ça doit pouvoir marcher puisque les fenêtres filles dans Word ou Excel ne se mélangent pas.
    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Points : 99
    Points
    99
    Par défaut Réponse
    Je viens d'avoir la solution par un autre site qui m'a orienté vers l'adresse ci-dessous:
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx)
    j'avais un problème d'initialisation dès le départ pour les
    fenêtres filles: je n'avais pas initialisé leur paramètre cbWndExtra dans la
    structure de leur WNDCLASS ce qui d'après les infos données à cette adresse
    est obligatoire dans le cas de MDI. Plus quelques petits problèmes de
    procédure.
    @+

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

Discussions similaires

  1. [androMDA] - quelques problèmes avec le tutoriel
    Par spidetra dans le forum Maven
    Réponses: 6
    Dernier message: 31/03/2008, 15h55
  2. [MDI] Positionner une fenêtre fille
    Par freud dans le forum Windows Forms
    Réponses: 11
    Dernier message: 02/11/2007, 23h44
  3. problème avec un tableau à plusieurs dimensions
    Par lelutin dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/09/2006, 12h05
  4. Quelques problèmes avec charAt
    Par Tazzz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/11/2005, 14h05
  5. Quelques problèmes avec SQL SERVEUR (LIKE et caractères)
    Par poussinphp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/09/2005, 09h43

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