2009-12-04 10 views
0

J'ai dérivé une classe de CListCtrl appelée CListCtrlCustomDraw et j'utilise le gestionnaire NM_CUSTOMDRAW pour dessiner la liste.
Le problème est que j'ai différentes polices pour l'article et l'article désélectionné sélectionnés, ils sont des variables membres du contrôle de la liste, mais quand je l'utiliseCListCtrl: comment obtenir une largeur de colonne lors de l'utilisation de polices différentes sur la même colonne?

m_list.SetColumnWidth(iCol, LVSCW_AUTOSIZE); 
int nTextWidth = m_list.GetColumnWidth(iCol); 
m_list.SetColumnWidth(iCol, LVSCW_AUTOSIZE_USEHEADER); 
int nColTitleWidth = m_list.GetColumnWidth(iCol); 
m_list.SetColumnWidth(iCol,max(nTextWidth, nColTitleWidth)); 

pour calculer la largeur de la colonne, la liste, utilisez la police de l'élément non sélectionné, qui n'est pas aussi large que la police de l'élément sélectionné (police en gras), donc il y aura un certain contenu ne peut pas être affiché dans l'élément sélectionné
même s'ils ont le même contenu. Puis-je définir pour utiliser quelle police pour calculer la largeur de la colonne?
J'ai essayé de définir la police avant les codes ci-dessus, mais il n'y a aucun effet.
Tout conseil sera apprécié.

Répondre

3

Vous devrez gérer manuellement la largeur de la colonne. Utilisez GetTextExtentPoint32 pour calculer la taille de votre chaîne la plus longue dans votre police la plus grande et définissez la largeur de la colonne de cette façon.