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

マウスポインタを2つ出したい

環境/言語:[OS:XP 言語]C# 環境:.NET1.1 ]
分類:[.NET]

[開発環境]
VisualStudio.NET 2002
[使用言語]
C#
[状況]
Form1(表示位置(0.0)←自分の見ている画面)とForm2(表示位置(1025,0)←別モニタ)
にそれぞれPictureBoxを1個づつ配置して、同じ画像を表示しています。

Form1のPictureBoxに貼り付けた画像上で左クリックしている間、
画像に線を描けます。
Form1の画像に線が描かれた時、Form2の画像にはForm1の画像に描かれた
線と同じ位置に線が自動的に描かれます。

[問題]
Form1で線を描いていない時に、別モニタに表示されているForm2に
自分が操作しているマウスポインタと同じ様な物を表示させたい(自分の画面
で操作しているマウスポインタと同じ位置に)のですが、
どの様な方法がありますでしょうか?

どんどん不明な点は質問してください。宜しくお願いします。
いくつか解決法がありそうですが、単純なものをひとつ。

Form1のマウスカーソルの座標をイベントなどでFomr2に送り、
PictureBox.Imageをコピーして、その上にカーソルを描画して
PictureBox.Imageに改めて設定しPictureBox.Invalidate()を呼び出すというのはどうでしょう(Form2がアクティブになったり、線を書かれているときにはPictureBox.Imageに元の値を戻します)。

カーソルの描画ですが、
Form1で使用されているものと同じカーソルを描画する場合は、
座標とともにCursor.Currentをもう一方のFormに送り、
そのDrawメソッドでカーソルを描画できますが、
Cursorクラスにはホットスポットを取得するメンバがないようなので
GetIconInfo()関数などでホットスポットを求めて正しい描画位置を見つけ出す必要があります。

(特にホットスポットの取得手段など)あまりスマートとはいえない方法のように思えますので
よりより方法をご存知の方がいらっしゃればご指摘お願いします。
ご返答ありがとうございます。
マウスカーソルを描画する事はできなかったのですが、
FillEllipse関数を使って色をつけ、画像を再描画し
色をつけ、画像を再描画し・・・・・を繰り返す処理
を作成してポインタもどきを表示することに成功しました。

ただ・・・3MB級のjpeg画像を処理するとかなり重いです。
そこでjpeg画像を圧縮しようと思いまして、こちらのHPにある
品質を指定して画像を保存するというTipsを利用させていただいた
のですが、bmp画像をjpeg画像にする場合にしか使えないのでしょうか。
jpeg画像→品質を落としたjpegに変換したいのですが・・・可能でしょうか?
■No2378に返信(麻耶さんの記事)
> ご返答ありがとうございます。
> マウスカーソルを描画する事はできなかったのですが、
> FillEllipse関数を使って色をつけ、画像を再描画し
> 色をつけ、画像を再描画し・・・・・を繰り返す処理
> を作成してポインタもどきを表示することに成功しました。
>
> ただ・・・3MB級のjpeg画像を処理するとかなり重いです。
> そこでjpeg画像を圧縮しようと思いまして、こちらのHPにある
> 品質を指定して画像を保存するというTipsを利用させていただいた
> のですが、bmp画像をjpeg画像にする場合にしか使えないのでしょうか。
> jpeg画像→品質を落としたjpegに変換したいのですが・・・可能でしょうか?
解決済み!

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