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

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

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


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

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

jeudi 28 juillet 2011 à 23:32:57 | Quelques problèmes avec MDI quand plusieurs fenêtres filles

ArthurAuguste

Membre Club
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 très simplifié du code:

// *************** 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); // création 1ère fille
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); // création 2ème fille
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
dimanche 31 juillet 2011 à 00:18:27 | Re : Quelques problèmes avec MDI quand plusieurs fenêtres filles

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

Quand tu alloues une structure dans la pile (dans une fonction). Remplis la structure de 0. RtlZeroMemory(). Surtout si tu te sers de cette structure en entrée dans d'autres fonctions.

Je ne sais pas si cela t'enleveras ce problème mais il t'evitera de t'en creer.

@++
dimanche 31 juillet 2011 à 08:58:31 | Re : Quelques problèmes avec MDI quand plusieurs fenêtres filles

ArthurAuguste

Membre Club
Merci pour la réponse, mais en fait je viens de trouver la solution à l'adresse ci-dessous:
http://msdn.microsoft.com/en-us/library/ms644909(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.
@+


Cette discussion est classée dans : fenêtre, ws, fenêtres, filles, 1ère


Répondre à ce message

Sujets en rapport avec ce message

Récupérer un handle de fenêtre [ par tintin72 ] Bonjour, Je programme une classe 'Splitter' qui a besoin de récupérer le handle des fenêtres filles pour les agencer dans la fenêtre hote. J'ai donc callback fenêtres filles [ par seb2086 ] Bonjour, J'ai une application avec 1 fenêtre mere et environ 40 ou 50 fenêtres filles.J'ai 1 callback pour la fenêtre mere mais j'aurai voulu savoir Problème de barre de status dans une application MDI [ par julien_boss ] Bonjour à tous :en réalité, je ne sais pas si mon problème est du à une barre de status, mais étant donné qu'il est apparu après la création de celle- !!! Pb crétation de fenêtre + thread !!! [ par yoyo269 ] Mon problème est que je crée une ou plusieurs fenêtres à l'intérieur d'un thread dont je stocke le handle dans un tableau de static HWND déclaré en gl Alternative au style WS_EX_LAYERED sur une fenetre enfant ? [ par shuttleur ] Bonjour à tous,Je cherche à faire un effet de halo autour d'une fenêtre.Cette fenêtre n'a que sa partie cliente visible. En fait, il me faudrait pouvo Fenêtres MDI maximized (effet de scintillement) [ par steph12358 ] BonjourJ'utilise c++ builder 5ben voilà mon problème :J'utilise des fenêtres MDI Filles, sans bordure (bsNone), et agrandies (wsMaximized)Je voudrais WS_POPUP et focus [ par vecchio56 ] C'est un problème assez compliqué a expliquer... J'ai remarqué que les menus (obtenus par exemple avec TrackPopupMenu) sont des fenêtre popup (avec le [Win32] Comment combiner status bar et scroll bar ? [ par beausoleil ] Bonjour à tous,Voilà mon problème : je cherche à créer une fenêtre possédant à la fois une barre d'état et des barres de défilement.Je crée ma fenêtre Problème de Focus entre fenêtre principal et Enfant [ par TeniX ] Salut,Voila mon problème est que sur ma fenêtre enfant je n'arrive à dire jamais à avoir la "Title bar" en bleu non grisé,j'ai testé plusieurs méthode taille fenêtre [ par Lustuc ] Bonjour, J'ai plusieurs fenêtres de tailles différentes, je cherche à imposer à toutes les fenêtre la taille d'une des fenêtres. Je recheche donc 2


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 : 1,342 sec (3)

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