質問者
実行中マウスのドラッグ&ドロップでコントロールを移動したいです

質問
すべての返信
-
レス付きませんね。
C#はあまり詳しくないので、具体的なコードは示せません。あしからず。まず、「コントロール」が、プッシュボタンやエディットコントロール
などを意味する場合の注意点ですが、これらはなりは小さいのですが、
フレームを持つウインドウと同じウインドウで、HWNDを持っています。
ウインドウは親子関係に強く依存しているので、現在の自分の親以外の
ウインドウに、まんま移動するのは、不可能ではありませんが、
困難で危険なコードになります。この様な場合は実際にはコントロールを移動させず、かつ、
ユーザーには移動しているような錯覚をするギミックを使います。
まず、モードに入ったら、対象コントロールを含むウインドウの見た目の
コピーをビットマップにとり、それを対象ウインドウの前面に配置した
ウインドウで表示します、これにより、マウスメッセージが対象ウインドウや
コントロールにに到達しないようにブロックし、かつ横取りするわけですね。
そうでないと、コントロールが反応してしまいますよね。次に
対象コントロールが選択され移動が開始されたとします。
原理的には、1.ドラッグが開始されたら、対象コントロールの見た目を
ビットマップにコピーします。
2.このビットマップをイメージリストに追加します。
3.イメージリストのドラッグを開始します。
4.ドロップを受け付けるウインドウでドロップされたら
対象コントロールと見た目がそっくりなコントロール(スタイルがまったく同じ)を
ドロップされたウインドウの子として作成し、配置します。
5.イメージリストとビットマップを破棄します。
6.移動対象となった元のコントロール(ウインドウ)を破棄します。てな、感じになると思います。
そもそもウインドウでないコントロールなども原理的には似た様な方法が
とれると思います。
さて、説明はこんだけなのですが、ウインドウと、メッセージ、
かつVSのデバックに対する十分な知識がないと困難が予測されます。
また、これを実装できる腕があると、質問はより詳細なものになっているかもしれませんね。
参考になればよいのですが。- 編集済み 仲澤@失業者 2014年4月25日 2:19
-
どこまでやりたいのかわかりませんが、こういったサンプルを欲しているのでしょうか。
http://support.microsoft.com/kb/813808/ja
(ダウンロードのリンクからソースコードおよび動く exe が手に入ります)ここからは苦言になってしまうのですが、「サンプルソフトがないとわからない。サンプルソフトを教えてくれ」は「質問」とは言いがたく、どちらかというと「依頼」に該当します。
ダメとは言いませんが、ある目的に特化したサンプルが Web 上で見つからない場合、そのサンプルを提供する人が時間をかけて書いてくれることになりますので、「無償で仕事を頼んでいる」ということになる点はご留意ください。