DOBON.NET DOBON.NETプログラミング掲示板過去ログ

マウスの追跡について

環境/言語:[環境WinXP 使用言語C# NET Framework1.1]
分類:[.NET]

どうも始めまして、まさと申します。
今C#を使ってソフトを開発しているのですが、
わからないことが出てきまして、よかったら教えてください。

文字や画像や罫線などのパーツを画面に貼り付けて、それらを印刷するような感じの
ソフトを作成しようと思っているのですが、以下のようなことを実現するやり方がわかりません。

@マウスをクリックしたらパーツの回りにフォーカスを描いて選択状態にする
Aそのパーツをつかんだまま移動(フォーカスのみ移動)
Bパーツを放すと実際の文字や画像がその位置に移動。

昔VBで似たようなソフトを作成したときは、ペンの種類をXORに指定して、
そのペンで選択されたパーツにフォーカスを描いて、
マウスムーブイベントで書き直してフォーカスを移動しているように見せていました。

ドットネットで調べているとペンにXORが使えないとのことだったので、
この方法は無理なのか?と思っているのですが、どうなのでしょうか?

自分がやろうとしている方法の他にも何か有効な方法等あればそちらも教えてください。

よろしくお願いします。
> ドットネットで調べているとペンにXORが使えないとのことだったので、
> この方法は無理なのか?と思っているのですが、どうなのでしょうか?

 こちらの管理人さまが発行されているメルマガの内容が参考になるかも知れません。
#ご用件を満たせるかどうか判りませんけれど。

.NETプログラミング研究 第54号
・表示色を反転して線を引くには?
http://blog.mag2.com/m/log/0000104516/105280634?page=1#105280634
どうもありがとうございます。
確かにControlPaintクラスのDrawReversibleLineでXORは実現できそうです。
でもこのメソッドって描画対象をどうやって指定するのでしょうか?
ControlPaintクラスの他のメソッドには描画対象のGraphicsが引数にあるものも
あるのですが、こちらのメソッドにはGraphicsとか指定引数で渡せないのです。

よろしくお願いします。
> でもこのメソッドって描画対象をどうやって指定するのでしょうか?

 えっと‥‥こうして掲示板へ質問して答えを待つより、実際に使ってみたほうが解り易いと思いますよ?(^_^;)

> ControlPaintクラスの他のメソッドには描画対象のGraphicsが引数にあるものも
> あるのですが、こちらのメソッドにはGraphicsとか指定引数で渡せないのです。

 仰る通り Graphics を指定しての描画はできません。これはスクリーン上の任意の点に描画できることを意味します。
 特定のコントロールの Graphics オブジェクトに依存した領域にだけ描画したいのであれば、 Graphics.VisibleClipBounds プロパティを Control.RectangleToScreen して範囲チェックを行うか、 Graphics.GetHdc メソッドで取得した HDC を指定して InvertRect API を用いることになるかと思います。
>>でもこのメソッドって描画対象をどうやって指定するのでしょうか?
>
>  えっと‥‥こうして掲示板へ質問して答えを待つより、実際に使ってみたほうが解り易いと思いますよ?(^_^;)

もちろん実際に使ってみたのですが、想定していたところと見当違いのところへ
描かれてしまったものでどういうことなのかなと・・・^^;

>>ControlPaintクラスの他のメソッドには描画対象のGraphicsが引数にあるものも
>>あるのですが、こちらのメソッドにはGraphicsとか指定引数で渡せないのです。
>
>  仰る通り Graphics を指定しての描画はできません。これはスクリーン上の任意の点に描画できることを意味します。

なるほど、そういうことだったのですね。

>  特定のコントロールの Graphics オブジェクトに依存した領域にだけ描画したいのであれば、 Graphics.VisibleClipBounds プロパティを Control.RectangleToScreen して範囲チェックを行うか、 Graphics.GetHdc メソッドで取得した HDC を指定して InvertRect API を用いることになるかと思います。

なるほど、了解しました。
いろいろとありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板