図形

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者

図形

#1

投稿記事 by 初心者 » 16年前

VC++で図形を作成してるのですがダイアログベース上で
①始めは原点から直線をひく
②2回目以降は前の直線の終点から引く、というプログラムを作りたいのですが
{
CEdit *p,*q;
 p=(CEdit *)GetDlgItem(IDC_EDIT1);
 q=(CEdit *)GetDlgItem(IDC_EDIT2);

CString a,b;
  int x=atoi(a)
  int y=atoi(b)

CDC *v;
  v=GetDC();
   v->MoveTo(0,0);
   v->Lineto(x,y);
ReleaseDC(v);
}
現在このようなプログラムになっています。EDIT箱1に終点のx座標、EDIT箱2に終点のy座標を打ち込めば
始点(0,0)から終点(x,y)までの直線が書き込まれます。
それから上記①、②がつくプログラムに変更したいのですが
よくわかりません。教えてください。

御津凪

Re:図形

#2

投稿記事 by 御津凪 » 16年前

最初の点を指定する時だけ、
v->MoveTo(0,0);
を実行するように変更するだけで良いのではないでしょうか。

バグ

Re:図形

#3

投稿記事 by バグ » 16年前

原点というのがどのポジションを指すのか分からないので、なんとも答えられないと思います。
原点座標が(0,0)であるという仮定で話を進めるならば、御津凪さんの言うように、初回だけMoveTo関数とLineTo関数を実行し、2回目以降はLineTo関数だけを実行してやればいいと思いますよ。

初心者

Re:図形

#4

投稿記事 by 初心者 » 16年前

そのイメージはもってるのですがプログラムの方が思い浮かばないんですよね。

バグ

Re:図形

#5

投稿記事 by バグ » 16年前

プログラムを書く上で必要な事の中で、具体的に何が思い浮かばないんですか?

1:CEditから文字列を取り出して、数値に変換する方法

2:変換した数値をMoveTo、LineTo関数へ引数として渡す方法

3:初回だけMoveTo関数を使用して、2回目以降は使用しないようにする方法

初心者

Re:図形

#6

投稿記事 by 初心者 » 16年前

上記のプログラムならわかるので上記ではダイアログに入力した数字を(この段階ではまだ文字扱いですが)
atoiでint型にしそれをLinetoに渡してるので1,2は大丈夫なんじゃないかなと思います。
3だと思います

バグ

Re:図形

#7

投稿記事 by バグ » 16年前

よくよく見てみると、上記のプログラムをそのまま使おうとすると、CDCクラスを毎回解放してしまうので、私や御津凪の言っていた方法は使えませんね。

線を引くたびに毎回CDCクラスのポインタを取得するのであれば、前回描画した際の座標を記憶させておくしかないかと思います。

具体的には、ダイアログクラスにCPoint型のメンバ変数を追加して、線を描画した後に次回描画時の原点座標を代入してやればいいかと思います。

※追記
上記の初心者さんのプログラムですが、CString型の変数が空っぽのままint型に変換しようとしているようですが、そこは問題ありませんか?

バグ

Re:図形

#8

投稿記事 by バグ » 16年前

>>御津凪さん
敬称を略してしまいました。申し訳ありません。

初心者

Re:図形

#9

投稿記事 by 初心者 » 16年前

ああ大有りですね・・
{
CEdit *p,*q;
 p=(CEdit *)GetDlgItem(IDC_EDIT1);
 q=(CEdit *)GetDlgItem(IDC_EDIT2);

CString a,b;
  int x=atoi(a)
  int y=atoi(b)

p->GetWindowText(a);
q->GetwindowText(b);

CDC *v;
  v=GetDC();
   v->MoveTo(0,0);
   v->LineTo(x,y);
ReleaseDC(v);
}
前回入力した文字を始点にするにはCPoint関数を使えばいいのはわかりましたが
初回だけ(0,0)で2回目以降の場合わけの方がいまいちよくわかりません

GPGA

Re:図形

#10

投稿記事 by GPGA » 16年前

staticなら、比較的簡単にできます。
static int bx = 0; by = 0;
   v->MoveTo(bx, by);
   v->LineTo(x,y);
   bx = x;
   by = y
 

初心者

Re:図形

#11

投稿記事 by 初心者 » 16年前

できました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る