Как использовать CMFCListCtrl с CListView? - PullRequest
0 голосов
/ 06 октября 2008

Я бы хотел использовать новые функции CMFCListCtrl с моим классом CListView (и, конечно, с новым CMFCHeaderCtrl внутри него). К сожалению, вы не можете использовать Attach () или SubclassWindow () , поскольку окно SysListView32 уже связано с объектом CListView.

Нужно ли переопределять CListView OnCmdMsg () и направлять все сообщения в мой собственный экземпляр CMFCListCtrl? (Будет ли это даже работать?) Или есть более легкое / чистое решение?

Ответы [ 3 ]

2 голосов
/ 06 октября 2008

Я бы унаследовал от CFormView и позволил бы CMFCListCtrl занять весь диалог вида формы.

1 голос
/ 11 мая 2010

Если вы хотите свой собственный CMFCHeaderCtrl (например, m_myHeaderCtrl, полученный из CMFCHeaderCtrl), вы должны переопределить эти три функции в своем собственном 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();
   }
}

Теперь у вас есть полный отклик в вашем собственном myHeaderCtrl, определяющий еще несколько функций (например, несколько строк в заголовке):

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

или определение собственного макета с помощью

afx_msg LRESULT OnHeaderLayout(WPARAM wp, LPARAM lp);  

Примеры приведены в коде MFC.

1 голос
/ 07 октября 2008

CListView не имеет большой функциональности. Как вы сказали в комментарии выше, просто выведите свой собственный класс представления из CView, обработайте WM_SIZE, чтобы изменить размер CMFCListCtrl, и все готово.

...