1

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

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

4

3 回答 3

2

我会从CFormView继承并让CMFCListCtrl占据表单视图的完整对话框。

于 2008-10-05T20:34:42.407 回答
2

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

于 2010-05-11T10:26:29.280 回答
1

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

于 2008-10-07T13:32:10.463 回答