2010-06-30 3 views
0

Dans un modèle de boîte de dialogue, j'ai placé une zone de liste, car la zone de liste cochée n'est pas affichée dans les options de disposition visuelle. Je l'ai mis à dessiner et à configurer avec DDX, en changeant la variable de classe associée de type CListBox à CCheckListBox - en d'autres termes les seules modifications que je fais de ce que l'assistant fait pour moi sont définies owner-draw, et chnage le membre type de variable.MFC: les éléments CCheckListBox se chevauchent

dans OnInitDialog méthode de mon dialogue, je puis tester avec:

m_List.AddString(_T("One")); 
m_List.AddString(_T("Two")); 
m_List.AddString(_T("Three")); 
m_List.AddString(_T("Four")); 
m_List.SetCheck(1,1); 

Quand je lance la liste est là, avec 4 articles et une vérification, avec les cordes à droite. Mais, les hauteurs des objets sont fausses. Il semble que la hauteur de la case à cocher est utilisée pour déterminer la hauteur de l'objet, ce qui entraîne le chevauchement du texte de l'élément ci-dessous.

Le comportement par défaut de la classe ne devrait-il pas être compris, sans que je doive régler individuellement la hauteur de chaque élément?

Répondre

1

De MSDN:

Si votre boîte de liste est une valeur par défaut boîte de check-list (une liste de chaînes avec les cases à cocher par défaut de taille à la gauche de chaque), vous pouvez utiliser la valeur par défaut CCheckListBox :: DrawItem pour dessiner la boîte de liste de contrôle . Sinon, vous devez remplacer la fonction CListBox :: CompareItem et les fonctions CCheckListBox :: MeasureItem CCheckListBox :: DrawItem et CCheckListBox :: MeasureItem.

Il semble que vous deviez appeler l'implémentation par défaut ou implémenter votre propre MesaureItem/DrawItem. C'est probablement pourquoi les éléments semblent se chevaucher.

Questions connexes