- PR -

PictureBoxについて

投稿者投稿内容
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-26 15:10
詳しく返答ありがとうございます。
その方法でつくり直してみます。

まだまだ質問があるんですが、大丈夫ですか???
VC++でCRectTrackerってのを使用してマウスで選択した範囲(矩形選択など)
を表示していたのですが、VC#では同じような働きをする
クラスってあります???
もしくはいい方法教えてください。
自分が作ってるのはまんま「ペイント」だと思ってください^^;

またまたよろしくお願いします。
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-26 16:58
描画をつくり直してみたんですが、

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
 Pen pen = new Pen(Color.Magenta) ;

 if(e.Button == MouseButtons.Left)
 {
  array.Add(new Line(pen, point, pictureBox1.PointToClient       
                             (Cursor.Position)));
  point = pictureBox1.PointToClient(Cursor.Position);
  this.pictureBox1.Invalidate();
 }
}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
 point = pictureBox1.PointToClient(Cursor.Position);
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
 g = pictureBox1.CreateGraphics();
 foreach(Line data in array)
 {
  data.Draw(g);
 }
}

にしてみたんですが、
マウス移動中のみ描画がうまく行かないんですが^^;
ウインドウが隠れた後の再描画とかの時にはちゃんと表示されているんですが、
マウスをクリックしてから離すまでと離した後がうまく描画できません。
作り方を間違えているんでしょうか???
再描画はうまくいきます。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-26 22:36
pictureBox1_Paint で、 pictureBox1.CreateGraphics のかわりに
e.Graphics に描画したらどうでしょうか。
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-27 08:43
ありがとうございます。
その方法でやってみたらちゃんとできました。

あと

>まだまだ質問があるんですが、大丈夫ですか???
>VC++でCRectTrackerってのを使用してマウスで選択した範囲(矩形選択など)
>を表示していたのですが、VC#では同じような働きをする
>クラスってあります???
>もしくはいい方法教えてください。
>自分が作ってるのはまんま「ペイント」だと思ってください^^;

なんですが、なにか知ってますか???
アドバイスよろしくお願いします。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-27 09:02
クラスに関しては聞いた覚えがありません。

自前でやる場合は、「描画クラス」と同様で、
選択範囲に対する描画オブジェクトを用意しておいて、配列とは別に
(「現在の選択」として)保持しておけばいいんじゃないかと思います。

この辺になると、「描画クラス」に Region を返すプロパティでも
用意しておいたほうがいいんでしょうね。

また、複数の描画単位を1個のコマンド単位にすることも考慮した
ほうがいいのかもしれません。
Command パターンや Composite パターンを念頭においています。
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-27 09:49
返答ありがとうございます。

自分でもう少し探してみます^^;
ありがとうございます。

次にまた聞きたいことが・・・。
ペイントとかの矩形選択機能なんですが、
1、マウスで範囲(四角)を選択する。
2、選択した場所をクリック
3、そのままドラッグすると切り取られた部分は白くなり、選択部分は移動できる。
このような処理ってどうすれば一番簡単にできますでしょうか?

選択した部分を別にビットマップとかにしたほうがいいんですかね?
良い方法、アドバイスお願いします。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-27 11:51
「選択した部分を別にビットマップとか」でいいと思います。
描画クラスでいえば、
コンストラクタで
・指定された範囲を切り抜いたビットマップを作成
・そこに、それまでの描画を実施

描画メソッドで
・移動元の範囲を白く塗りつぶす
・移動先にビットマップを描画

でいいのかな?
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-27 11:58
返答ありがとうございます。
すいません、何度もやってるんですが、
どうしてもまず画像を切り抜いてbitmapにすることができないんですが。。。
切り抜いたものをDrawImageでは表示できるのですが・・・。

スキルアップ/キャリアアップ(JOB@IT)