ヘッダのディバイダドラッグ時のメッセージの取得

リストビューのヘッダのディバイダをドラッグするときのメッセージを取得するには、 2通りの方法がある。どちらの方法でも、まずCListCtrlクラスの派生クラスを作成し、 これをリストビューのクラスとする。


方法1:ON_NOTIFY処理を使用したメッセージハンドラを作成する。
ON_NOTIFY処理を利用したメッセージハンドラは以下のように作成する。
// ソースファイルのメッセージマップ --------------------
// ヘッダのコントロールIDは常に0である(2番目のパラメータ)
BEGIN_MESSAGE_MAP(CDeliveListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CDeliveListCtrl)
	ON_NOTIFY(HDN_BEGINTRACK, 0, OnBegintrack)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// メッセージハンドラ --------------------
void CDeliveListCtrl::OnBegintrack(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
	
	*pResult = 0;
}

方法2:OnNotify関数をオーバーライドさせる。
こちらの方法を使えば、例えばディバイダのドラッグを禁止するような処理も可能である。
BOOL CDeliveListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{
	// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
	switch( ((NMHDR*)lParam)->code ) {
	case HDN_BEGINTRACK:
		*pResult = TRUE;
		return TRUE;
	}
	
	return CListCtrl::OnNotify(wParam, lParam, pResult);
}

目次へ
豆知識−WM_NOTIFYメッセージとON_NOTIFYメッセージ