サブクラス化したリストビューでクリックを検知するには? – プログラミング – Home

サブクラス化したリストビューでクリック...
 
通知
すべてクリア

[解決済] サブクラス化したリストビューでクリックを検知するには?


田中さん
 田中さん
(@田中さん)
ゲスト
結合: 19年前
投稿: 49
Topic starter  

こんにちわ。開発環境WindowsXP VisualC++.NET SDK開発です。

リストビューをサブクラス化し、クリックしたセルの色を変えようと思っています。

そこでサブクラス化したリストビューでクリックされた事を検知しようとしていますが
検知できません。
メインダイアログではWM_NOTIFY:メッセージを取得して何番目のitemかは検知できるので
すが、サブクラス化したリストビューでは反応がありません。
サブクラス化したリストビューは以下のようにしています。
もしやクリックは親ウィンドウでなければ処理出来ないのでしょうか?

//サブクラス化したList1のプロセス
int CALLBACK List1Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){

switch(uMsg){
case WM_NOTIFY:
LPNMLISTVIEW lpnmlv;
lpnmlv=(LPNMLISTVIEW)lParam;
if((int)wParam==IDC_LIST1){
switch(lpnmlv->hdr.code){
// カラムをクリック
case LVN_COLUMNCLICK:
MessageBox(NULL,test-カラムクリック,test,MB_OK);
break;
}
}
break;
}
return (int)CallWindowProc(g_orgList1Proc,hWnd,uMsg,wParam,lParam);
}


引用未解決
トピックタグ
FUKU
 FUKU
(@FUKU)
ゲスト
結合: 17年前
投稿: 73
 

初めて投稿します。リストビューをサブクラス化したのであれば、

case WM_NOTIFY:
 LPNMHEADER lpHhder = (LPNMHEADER)lParam;
switch (lpHhder->hdr.code) {
case HDN_ITEMCLICK:
TRACE(%d列目をクリック\n, lpHhder->iItem);
break;

では無いでしょうか。(間違ってたらすいません)


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

色を付けるならカスタムドローってことか、
そのへん詳しくない。

WM_NOTIFYやWM_COMMANDなどは
ボタンコントロールなどがWM_LBUTTONDOWNやWM_LBUTTONUPなどを処理した結果として
親ウィンドウへ通知するために送るメッセージだろ。

どうしてもWM_NOTIFYが欲しいなら
親ウィンドウから通知する仕組みを自分で作るとか。

あるいは別の方法ないのかな。
そのへん詳しくない。


返信引用
田中さん
 田中さん
(@田中さん)
ゲスト
結合: 19年前
投稿: 49
Topic starter  

FUKUさん、wclrp ( 'o')さんありがとうございます。

色付けはオーナードローでやってまして、
リストコントロールをサブクラス化してやってます。
親ウィンドウのPROCでは上記のコードで処理出来るのですが、
他のコードも混在するので、サブクラス内で処理出来るのであれば
コードがきれいになるかなと思い質問しました。

サブクラス内で処理出来る方法があればと思い、探している所です。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 21年前
投稿: 33
 

>サブクラス内で処理出来る方法があればと思い、探している所です。

単純には無理です。

WM_NOTIFY が親宛のメッセージであることは既に指摘されている通りです。

なので、これも指摘されていることだけど、親宛に届いたメッセージをリストビューに
返送してやる仕組みが必要です。

MFC に「メッセージ リフレクション(メッセージ返送)」という仕組みが用意されてい
るんで、それを参考にしてみるとか。


返信引用
ういろう
 ういろう
(@ういろう)
ゲスト
結合: 22年前
投稿: 2
 

http://homepage3.nifty.com/mitui707/VisualC/VClistview_color.html/

というのがありました。


返信引用
田中さん
 田中さん
(@田中さん)
ゲスト
結合: 19年前
投稿: 49
Topic starter  

MFCは詳しくないのですSDKのサンプルを探しています。
解決済みをチェックするのを忘れてました。

色々な手段を試行錯誤してます。 この質問は一旦締め切りとさせてもらいます。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

オープンソースのタブブラウザ Donut RAPT にて、メッセージリフレクションを
利用した、リストビューのカスタムドローを行なっています。

MFC を使用せず、SDK+WTL で実装しています。
ソース内の、DownloadManager.h / MSOListViewCtrl.h/cpp がその実装です。
http://www.atmark.gr.jp/~s2000/r/files/src/#DonutRAPT_last


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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