| オーナードローリストビュー |
// ヘッダファイルでの記述 --------------------
// オーバーライド
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CDeriveListCtrl)
public:
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
//}}AFX_VIRTUAL
// ソースファイルへの記述 --------------------
void CDeriveListCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
……
}
void CDeriveListCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
……
}
// リストビュークラスのヘッダーへの記述
class CMyListCtrl : public CListCtrl
{
……
// 生成されたメッセージ マップ関数
protected:
//{{AFX_MSG(CMyListCtrl)
afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
……
};
// リストビュークラスのソース内のメッセージマップへの記述
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CMyListCtrl)
ON_MESSAGE(WM_SETFONT, OnSetFont)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// OnSetFont関数の実装
LRESULT CMyListCtrl::OnSetFont(WPARAM wParam, LPARAM lParam)
{
LRESULT res = Default();
CRect rc;
GetWindowRect( &rc );
WINDOWPOS wp;
wp.hwnd = m_hWnd;
wp.cx = rc.Width();
wp.cy = rc.Height();
wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
SendMessage( WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp );
return res;
}
// リストビュークラスのヘッダーへの記述
// オーバーライド
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CMyListCtrl)
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
virtual void MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct );
//}}AFX_VIRTUAL
// リストビュークラスのソース内のメッセージマップへの記述
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CMyListCtrl)
ON_MESSAGE(WM_SETFONT, OnSetFont)
ON_WM_MEASUREITEM_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// MeasureItem関数の実装
void CMyListCtrl::MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
{
LOGFONT lf;
GetFont()->GetLogFont( &lf );
if( lf.lfHeight <0 )
lpMeasureItemStruct->itemHeight = -lf.lfHeight;
else
lpMeasureItemStruct->itemHeight = lf.lfHeight;
}