Visual C++ 2008 Express Edition
SDK
Vista SP1
リストコントロールのヘッダ(カラム)がドラッグされた(ドラッグ終了)ときのメッセージ
を捕まえたいのですが、うまくいきません。
HDN_ENDDRAGが捕まえられません。><
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LPNMHDR lpnmh;
switch (message)
{
case WM_NOTIFY:
if(wParam == ID_LISTVIEW)
{// リストビューの処理
lpnmh = (LPNMHDR)lParam;
if(lpnmh->code == HDN_ENDDRAG)
{
// ここに飛んでこない
}
}
break;
}
}
追記:親ウィンドウにリストコントロールを貼りつけています。
WndProc()は親ウィンドウのものです。
spy++で覗いてみることをおすすめしますが……
# って、ExpressEditionには無いですね。
# 類似のフリーソフトがあると思われますので探してみて下さい。
リストビューに付属のヘッダーコントロールのNOTIFYメッセージはコントロールIDでは判
別できないようです。
# とりあえずコントロールIDが0でしたが、複数あった場合にどうなるのかは未確認です。
lpnmh->hwndFromがListView_GetHeader()で取得したモノと同じか確認し、
その後でHDN_ENDDRAGと比較を行ってはどうでしょうか。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LPNMHDR lpnmh;
switch (message)
{
case WM_NOTIFY:
if(wParam == ID_LISTVIEW)
{// リストビューの処理
}
else if(wParam == 0)
{// カラムのIDは 0
lpnmh = (LPNMHDR)lParam;
if(lpnmh->code == HDN_ENDDRAG && lpnmh->hwndFrom ==
ListView_GetHeader(hList))
{
// ここでカラムのドラッグが捕まえることができた
}
}
break;
}
}
瀬戸っぷさん、ありがとうございました。
無事、捕まえることができました。