リストビューのヘッダのディバイダをドラッグするときのメッセージを取得するには、
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メッセージ