リストビューのカラムがドラッグされたメッセージを捕まえたい – プログラミング – Home

リストビューのカラムがドラッグされたメ...
 
通知
すべてクリア

[解決済] リストビューのカラムがドラッグされたメッセージを捕まえたい


nfs
 nfs
(@nfs)
ゲスト
結合: 16年前
投稿: 48
Topic starter  

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;
}
}


引用未解決
トピックタグ
nfs
 nfs
(@nfs)
ゲスト
結合: 16年前
投稿: 48
Topic starter  

追記:親ウィンドウにリストコントロールを貼りつけています。
WndProc()は親ウィンドウのものです。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

spy++で覗いてみることをおすすめしますが……
# って、ExpressEditionには無いですね。
# 類似のフリーソフトがあると思われますので探してみて下さい。

リストビューに付属のヘッダーコントロールのNOTIFYメッセージはコントロールIDでは判
別できないようです。
# とりあえずコントロールIDが0でしたが、複数あった場合にどうなるのかは未確認です。
lpnmh->hwndFromがListView_GetHeader()で取得したモノと同じか確認し、
その後でHDN_ENDDRAGと比較を行ってはどうでしょうか。


返信引用
nfs
 nfs
(@nfs)
ゲスト
結合: 16年前
投稿: 48
Topic starter  

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;
}
}

瀬戸っぷさん、ありがとうございました。
無事、捕まえることができました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました