我想在我的 CListView 类中使用新的 CMFCListCtrl 功能(当然,还有新的CMFCHeaderCtrl)。不幸的是,你不能使用 Attach()或 SubclassWindow(),因为SysListView32窗口已经与CListView对象相关联。
我是否必须覆盖CListView的 OnCmdMsg()并将所有消息路由到我自己的CMFCListCtrl实例? (这甚至会起作用吗?)或者是否有更简单/更清洁的解决方案?
答案 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代码中。