• ベストアンサー

CListCtrl で OnLButtonUp を実行できない

ON_WM_LBUTTONDOWN()は実行できるのですが、 ON_WM_LBUTTONUP()が実行できません。 OnLButtonDown()内のCListCtrl::OnLButtonDown(nFlags, point); を削除するとON_WM_LBUTTONUP()が実行されるのですが、 今度はCLisCtrlのリストアイテムが選択されません。 1クリックでDOWN、UP両方とも起動させるにはどうすればいいでしょうか? 他に ON_WM_LBUTTONDBLCLK() ON_NOTIFY_REFLECT(LVN_BEGINDRAG,&CListCtrl::OnLvnBegindrag) の2つも拾うようにしています。これが原因なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • davidfox
  • ベストアンサー率58% (21/36)
回答No.1

意見のみですが... >ON_NOTIFY_REFLECT(LVN_BEGINDRAG,&CListCtrl::OnLvnBegindrag) >の2つも拾うようにしています ドラッグも期待されているようですが、ドラッグされた場合には通常のWM_LBUTTONUP は諦めるべきかと思います。 ドラッグを諦めれば WM_LBUTTONUP は処理できるのが筋と思いますが、ListCtrl にドラッグだけしないように指示する方法は判りません。恐らくエクスプローラの為に作られているので、それ程汎用性は無いのだと思います。 今思い付くのは、既に確認されているように CListCtrl::OnLButtonDown(nFlags, point) の読み出しを止めて、LBUTTONDOWN を知らせないようにする位ですかね。しかしリストアイテム選択を始め、ListCtrlがやっている仕事は全て自分で書かねばなりません。 私なら WM_LBUTTONUP でやるべき作業を他でできないか検討する、でしょうか。

_jast
質問者

お礼

ドラッグドロップの理解もあやしくいっぱいいっぱいになっていました。 dragとUPの両立は無理だと教えていただきありがとうございました。

関連するQ&A