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

  • 質問

  • お世話になります

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

    どのようにしたら良いでしょうか?

    よろしくお願いします。

    2014年4月24日 11:53

すべての返信

  • レス付きませんね。
    C#はあまり詳しくないので、具体的なコードは示せません。あしからず。

    まず、「コントロール」が、プッシュボタンやエディットコントロール
    などを意味する場合の注意点ですが、これらはなりは小さいのですが、
    フレームを持つウインドウと同じウインドウで、HWNDを持っています。
    ウインドウは親子関係に強く依存しているので、現在の自分の親以外の
    ウインドウに、まんま移動するのは、不可能ではありませんが、
    困難で危険なコードになります。

    この様な場合は実際にはコントロールを移動させず、かつ、
    ユーザーには移動しているような錯覚をするギミックを使います。
    まず、モードに入ったら、対象コントロールを含むウインドウの見た目の
    コピーをビットマップにとり、それを対象ウインドウの前面に配置した
    ウインドウで表示します、これにより、マウスメッセージが対象ウインドウや
    コントロールにに到達しないようにブロックし、かつ横取りするわけですね。
    そうでないと、コントロールが反応してしまいますよね。次に
    対象コントロールが選択され移動が開始されたとします。
    原理的には、

     1.ドラッグが開始されたら、対象コントロールの見た目を
      ビットマップにコピーします。
     2.このビットマップをイメージリストに追加します。
     3.イメージリストのドラッグを開始します。
     4.ドロップを受け付けるウインドウでドロップされたら
      対象コントロールと見た目がそっくりなコントロール(スタイルがまったく同じ)を
      ドロップされたウインドウの子として作成し、配置します。
     5.イメージリストとビットマップを破棄します。
     6.移動対象となった元のコントロール(ウインドウ)を破棄します。

    てな、感じになると思います。
    そもそもウインドウでないコントロールなども原理的には似た様な方法が
    とれると思います。
    さて、説明はこんだけなのですが、ウインドウと、メッセージ、
    かつVSのデバックに対する十分な知識がないと困難が予測されます。
    また、これを実装できる腕があると、質問はより詳細なものになっているかもしれませんね。
    参考になればよいのですが。

    2014年4月25日 1:54
  • ありがとうございます

    私の力ではサンプルソフトが無いと分かりません

    申し訳ございませんがサンプルソフトを教えて頂けるとありがたいです

    よろしくお願いします

    質問内容が適切ではありませんでした。

    実行中

    マウスの左ボタンを押す事でコントロールを選択し

    コントロールを移動させる

    マウスの左ボタンを離すと

    コントロールがはなした位置に移動するです

    後、移動した位置が保存(キープ)される事です

    2014年4月25日 20:11
  • どこまでやりたいのかわかりませんが、こういったサンプルを欲しているのでしょうか。
    http://support.microsoft.com/kb/813808/ja
    (ダウンロードのリンクからソースコードおよび動く exe が手に入ります)

    ここからは苦言になってしまうのですが、「サンプルソフトがないとわからない。サンプルソフトを教えてくれ」は「質問」とは言いがたく、どちらかというと「依頼」に該当します。
    ダメとは言いませんが、ある目的に特化したサンプルが Web 上で見つからない場合、そのサンプルを提供する人が時間をかけて書いてくれることになりますので、「無償で仕事を頼んでいる」ということになる点はご留意ください。

    2014年4月26日 0:35
    モデレータ
  • ありがとうございます

    ご忠告ありがとうございます

    もう一度頑張ってみます

    良い情報があれば教えてくださいね

    今後共お世話になりますがよろしくお願いします

    2014年4月26日 8:35