ページ 11

TreeviewのノードをD&Dで動かしたい

Posted: 2016年2月04日(木) 22:17
by 水波形
最近ここの更新が止まってしまい、すごく悲しい水波形です。
AB4.23.00を愛用しています。

Treeviewのノードをドラッグアンドドロップ(D&D)で移動させる方法について質問があります。

コード: 全て選択

TVN_BEGINDRAG
が検知されたらD&Dが開始される事が分かり、

D&Dが終了すると、

コード: 全て選択

WM_LBUTTONUP
が通知されるということがわかったため、Treeviewをサブクラス化しWM_LBUTTONUPを捕まえます。

ここまではうまく行ったのですが、D&Dの対象を知る方法が分かりません。

コード: 全て選択

TVGN_DROPHILITE
を利用すれば良さそう(参考サイト)なのですが、
SendMessageに与える値がよく分かりません。

コード: 全て選択

ターゲットのノードのハンドル = SendMessage(TreeViewのハンドル, TVM_GETNEXTITEM, TVGN_DROPHILITE, D&Dを始めたノードのハンドル)

コード: 全て選択

ターゲットのノードのハンドル = SendMessage(TreeViewのハンドル, TVM_GETNEXTITEM, TVGN_DROPHILITE, D&Dを終えたハンドル)

コード: 全て選択

ターゲットのノードのハンドル = SendMessage(D&Dを始めたノードのハンドル, TVM_GETNEXTITEM, TVGN_DROPHILITE, D&Dを終えたノードのハンドル)

コード: 全て選択

ターゲットのノードのハンドル = SendMessage(D&Dを終えたノードのハンドル, TVM_GETNEXTITEM, TVGN_DROPHILITE, D&Dを始めたノードのハンドル)
というのを試しましたが、返ってくる値はすべて0(失敗)……(参考

これはどのように使えばいいのでしょうか。
ご存じの方がいらっしゃいましたらご教授ください。
よろしくお願いいたします。

Re: TreeviewのノードをD&Dで動かしたい

Posted: 2016年2月07日(日) 22:15
by たかせ
Treeviewに関してプログラミングの経験がないのでわかりませんが、
まずはSendMessageの直後にGetLastErrorとFormatMessageを追加してください。
エラー内容を確認することで対応策がみつかるかもしれません。
前向きでない方法ですみませんが。
よろしくおねがいします。