- ベストアンサー
WindowsAPI ツリービューについて
はじめまして,calkと申します。 WindowsAPI(C/C++)のツリービューなのですが,「現在どの項目にカーソルがあるか」という情報を取得するにはどうすればよいのでしょうか。 選択されている項目は,TreeView_GetSelection()を使うことで取得することが出来たのですが,カーソルとなると上手くいきません。 現在はマウスカーソルの座標で判断しているのですが,何か他に方法はないものでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
TreeView はまだ使ったことないので,マニュアル見ただけでの回答ですが…. > 「現在どの項目にカーソルがあるか」という情報を > 取得するにはどうすればよいのでしょうか。 これがもし,「カーソルが別の項目に移動したら WM_NOTIFY で知らせてほしい」 という意味であれば,TreeView のマニュアルを見る限り,どうやらそういう 通知メッセージは存在しないようです. (ある場所に一定時間とどまったら通知する,ということであれば NM_HOVER が使えるかもしれません.) > 現在はマウスカーソルの座標で判断しているのですが, そのマウスカーソル座標の取得は NM_NCHITTEST で行っているのでしょうか? もしそうであれば,NMMOUSE 構造体に TreeView 固有の情報は入ってないでしょうか? (カーソル位置の項目のハンドルとか.) また,その判断方法というのは TreeView_HitTest() マクロまたは TVM_HITTEST メッセージを使った方法でしょうか? もしそうでなければ,これらのいずれかを使う方がいいと思います. (もし既に使っておられるのなら余計なお世話ですが.)
お礼
noocyteさん 座標は単純にWM_NOTIFYが送られてきた時にGetCursorPos()で取得しScreenToClient()を使いツリービュー上の座標に変換していました。 よく考えてみれば,この座標を基にTreeView_HitTest()を使い,その項目の情報を取得すればよかったのですね。 試しにTreeView_HitTest()とTreeView_GetItem()を用いてみたところ,無事解決いたしました。 どうもありがとうございました。