1

新しいCMFCListCtrl機能をCListViewクラス (そしてもちろん、その中の新しい CMFCHeaderCtrl) で使用したいと考えています。残念ながら、 SysListView32 ウィンドウは既に CListView オブジェクトに関連付けられているため、Attach()またはSubclassWindow( )を使用することはできません。

CListView のOnCmdMsg()をオーバーライドし、すべてのメッセージを CMFCListCtrl の独自のインスタンスにルーティングする必要がありますか? (それもうまくいきますか?)または、より簡単でクリーンなソリューションはありますか?

4

3 に答える 3

2

独自のCMFCHeaderCtrl(CMFCHeaderCtrlから派生したfe m_myHeaderCtrl)が必要な場合は、独自のCMFCListCtrlでこれらの3つの関数をオーバーライドする必要があります。

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 に答える
2

CFormViewから継承し、CMFCListCtrlがフォーム ビューの完全なダイアログを占めるようにします。

于 2008-10-05T20:34:42.407 に答える
1

CListView には多くの機能がありません。上記のコメントで述べたように、CView から独自のビュー クラスを派生させ、WM_SIZE を処理して CMFCListCtrl のサイズを変更すれば、準備完了です。

于 2008-10-07T13:32:10.463 に答える