ページ 1 / 1
図形
Posted: 2008年11月19日(水) 13:28
by 初心者
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:図形
Posted: 2008年11月19日(水) 14:39
by 御津凪
最初の点を指定する時だけ、
v->MoveTo(0,0);
を実行するように変更するだけで良いのではないでしょうか。
Re:図形
Posted: 2008年11月19日(水) 15:12
by バグ
原点というのがどのポジションを指すのか分からないので、なんとも答えられないと思います。
原点座標が(0,0)であるという仮定で話を進めるならば、御津凪さんの言うように、初回だけMoveTo関数とLineTo関数を実行し、2回目以降はLineTo関数だけを実行してやればいいと思いますよ。
Re:図形
Posted: 2008年11月19日(水) 15:24
by 初心者
そのイメージはもってるのですがプログラムの方が思い浮かばないんですよね。
Re:図形
Posted: 2008年11月19日(水) 15:28
by バグ
プログラムを書く上で必要な事の中で、具体的に何が思い浮かばないんですか?
1:CEditから文字列を取り出して、数値に変換する方法
2:変換した数値をMoveTo、LineTo関数へ引数として渡す方法
3:初回だけMoveTo関数を使用して、2回目以降は使用しないようにする方法
Re:図形
Posted: 2008年11月19日(水) 15:34
by 初心者
上記のプログラムならわかるので上記ではダイアログに入力した数字を(この段階ではまだ文字扱いですが)
atoiでint型にしそれをLinetoに渡してるので1,2は大丈夫なんじゃないかなと思います。
3だと思います
Re:図形
Posted: 2008年11月19日(水) 16:10
by バグ
よくよく見てみると、上記のプログラムをそのまま使おうとすると、CDCクラスを毎回解放してしまうので、私や御津凪の言っていた方法は使えませんね。
線を引くたびに毎回CDCクラスのポインタを取得するのであれば、前回描画した際の座標を記憶させておくしかないかと思います。
具体的には、ダイアログクラスにCPoint型のメンバ変数を追加して、線を描画した後に次回描画時の原点座標を代入してやればいいかと思います。
※追記
上記の初心者さんのプログラムですが、CString型の変数が空っぽのままint型に変換しようとしているようですが、そこは問題ありませんか?
Re:図形
Posted: 2008年11月19日(水) 16:11
by バグ
>>御津凪さん
敬称を略してしまいました。申し訳ありません。
Re:図形
Posted: 2008年11月19日(水) 16:49
by 初心者
ああ大有りですね・・
{
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回目以降の場合わけの方がいまいちよくわかりません
Re:図形
Posted: 2008年11月19日(水) 17:15
by GPGA
staticなら、比較的簡単にできます。
static int bx = 0; by = 0;
v->MoveTo(bx, by);
v->LineTo(x,y);
bx = x;
by = y
Re:図形
Posted: 2008年11月19日(水) 17:23
by 初心者
できました。ありがとうございました。