如何在CListView中使用CMFCListCtrl?

时间:2008-10-05 20:02:10

标签: mfc mfc-feature-pack

我想在我的 CListView 类中使用新的 CMFCListCtrl 功能(当然,还有新的CMFCHeaderCtrl)。不幸的是,你不能使用 Attach() SubclassWindow(),因为SysListView32窗口已经与CListView对象相关联。

我是否必须覆盖CListView的 OnCmdMsg()并将所有消息路由到我自己的CMFCListCtrl实例? (这甚至会起作用吗?)或者是否有更简单/更清洁的解决方案?

3 个答案:

答案 0 :(得分:2)

我将继承自 CFormView ,让 CMFCListCtrl 占据表单视图的完整对话框。

答案 1 :(得分:1)

CListView没有很多功能。就像你在上面的评论中所说的那样,只需从CView派生自己的视图类,处理WM_SIZE以调整CMFCListCtrl的大小,你就可以了。

答案 2 :(得分:1)

如果你想要你自己的CMFCHeaderCtrl(f.e. 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代码中。