我想在我的CListView类中使用新的CMFCListCtrl功能(当然还有里面的新 CMFCHeaderCtrl)。不幸的是,您不能使用Attach()或SubclassWindow(),因为 SysListView32 窗口已经与 CListView 对象相关联。
我是否必须覆盖 CListView 的OnCmdMsg()并将所有消息路由到我自己的 CMFCListCtrl 实例?(这甚至会起作用吗?)还是有更简单/更清洁的解决方案?
我想在我的CListView类中使用新的CMFCListCtrl功能(当然还有里面的新 CMFCHeaderCtrl)。不幸的是,您不能使用Attach()或SubclassWindow(),因为 SysListView32 窗口已经与 CListView 对象相关联。
我是否必须覆盖 CListView 的OnCmdMsg()并将所有消息路由到我自己的 CMFCListCtrl 实例?(这甚至会起作用吗?)还是有更简单/更清洁的解决方案?
我会从CFormView继承并让CMFCListCtrl占据表单视图的完整对话框。
如果你想要你自己的 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 代码中。
CListView 没有很多功能。就像您在上面的评论中所说,只需从 CView 派生您自己的视图类,处理 WM_SIZE 以调整 CMFCListCtrl 的大小,就可以了。