Question

J'aimerais utiliser les nouvelles fonctionnalités CMFCListCtrl avec ma classe CListView (et, bien entendu, le nouveau CMFCHeaderCtrl qui s'y trouve). Malheureusement, vous ne pouvez pas utiliser Attach () ou SubclassWindow () car la fenêtre SysListView32 est déjà associée à un objet CListView.

Dois-je remplacer le OnCmdMsg () <) de CListView et acheminer tous les messages vers ma propre instance de CMFCListCtrl? (Cela fonctionnera-t-il même?) Ou existe-t-il une solution plus facile / plus propre?

Était-ce utile?

La solution

Je hériterais de CFormView et laisserais le CMFCListCtrl occuper l'intégralité de la boîte de dialogue de la vue formulaire.

Autres conseils

CListView n’a pas beaucoup de fonctionnalités. Comme vous l'avez dit dans le commentaire ci-dessus, dérivez votre propre classe de vue de CView, gérez WM_SIZE pour redimensionner le CMFCListCtrl et vous êtes prêt à partir.

Si vous voulez votre propre CMFCHeaderCtrl (par exemple, m_myHeaderCtrl dérivé de CMFCHeaderCtrl), vous devez remplacer ces trois fonctions dans votre propre CMFCListCtrl

CMFCHeaderCtrl& CMyMFCListCtrl::GetHeaderCtrl() 
{ 
   return m_myHeaderCtrl; 
}

void CMyMFCListCtrl::InitHeader()
{
   // Initialize header control:
   m_myHeaderCtrl.SubclassDlgItem(0, this);
}


void CMyMFCListCtrl::OnSize(UINT nType, int cx, int cy)
{
   CListCtrl::OnSize(nType, cx, cy);
   if (myHeaderCtrl.GetSafeHwnd() != NULL)
   {
      myHeaderCtrl.RedrawWindow();
   }
}

Vous avez maintenant la réponse complète dans votre propre myHeaderCtrl, définissant quelques fonctions supplémentaires. (par exemple, plusieurs lignes dans l'en-tête):

OnDrawItem(CDC* pDC, int iItem, CRect rect, BOOL bIsPressed, BOOL bIsHighlighted);

ou en définissant votre propre mise en page par

afx_msg LRESULT OnHeaderLayout(WPARAM wp, LPARAM lp);  

Des exemples figurent dans le code MFC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top