2011-09-28 5 views
0

J'ai un CMFCPropertyGridCtrl que j'utilise dans une boîte de dialogue d'options. J'ai une méthode dans ma classe de dialogue d'options appelée InitPropertyGrid(). Cette méthode efface toutes les propriétés et remplit les objets CMFCPropertyGrid (en utilisant un objet Settings personnalisé pour les valeurs de propriété) et les ajoute à la grille.CMFCPropertyGridCtrl dernier élément non dessiné?

Lorsque j'ouvre ma boîte de dialogue la première fois toutes les propriétés s'affichent correctement. Cependant, si je ferme ensuite ma boîte de dialogue et la rouvre, la toute dernière propriété n'est pas dessinée à l'écran. Toutes les autres propriétés sont tirées normalement:

Première fois:

enter image description here

Toutes les heures suivantes:

enter image description here

Comme vous pouvez le voir, l'icône plus/moins est montrant moins dans les deux cas pour indiquer que la section est étendue. Lorsque le dernier élément n'apparaît pas, cliquer une fois sur l'icône +/- pour se contracter et une fois pour agrandir provoque l'affichage correct du dernier élément.

Notez que lorsque je ferme la boîte de dialogue, je ne la détruis pas mais je la réaffiche. Cependant, immédiatement avant d'appeler ShowWindow sur la boîte de dialogue, j'appelle la méthode InitPropertyGrid() (appelée par UpdateToCurrentSettings).

if(optionsDialog_ == NULL) 
{ 
    optionsDialog_ = new OptionsDialog(settings_, this); 
    optionsDialog_->Create(OptionsDialog::IDD, this); 
} 

optionsDialog_->UpdateToCurrentSettings(); 
optionsDialog_->ShowWindow(SW_SHOW); 

Répondre

0

Je trouve que je peux éliminer ce problème simplement en appelant myPropertyGrid.ExpandAll(TRUE) à la fin du code où j'initialiser la grille de la propriété (InitPropertyGrid() pour moi). Cela semble forcer toutes les propriétés à se développer.