ページ 1 / 1
原点
Posted: 2008年11月20日(木) 17:05
by 初心者
VisualC++の図形描写で原点の位置変更などはどうやってやるのでしょうか
例えば(100,100)を原点にしたい場合など。
Re:原点
Posted: 2008年11月20日(木) 17:44
by バグ
いまいち要領を得ませんが、これまでの質問を見ているとMFCを使用しているみたいですので、CDCクラスのメンバであるMoveTo関数で指定してやればいいんじゃないでしょうか?
Re:原点
Posted: 2008年11月20日(木) 17:57
by 初心者
書き忘れてました。VC++のMFCのダイアログベースでやってます。
MoveToはあくまで現在位置だけを変更してるのではないでしょうか?
例えばMoveToで(100,100)としておくと次の図形はそこから始まるというものですよね。
私がスレの内容で求めているのは符号(-)を扱うことです。原点を動かさなければ-の座標が表示されないんです。
Re:原点
Posted: 2008年11月20日(木) 17:58
by non
最近、「初心者」さんのハンドルネームのスレッドをたくさん見かけますけど、すべて同一人物ですか?
なんか、やられていることに一貫性がないし・・・・修得レベルが想像できない。
もっと、区別のつきやすいハンドルにして欲しいですよね。
Re:原点
Posted: 2008年11月20日(木) 18:09
by 初心者
あー僕も思いました。バグさんはわかってるらっしゃるみたいですが、僕が質問してるのは全てVisualC++のMFC関連です。他は僕じゃないです。でも同一の名前がつけれますのでしょうがないのではないでしょうか?
「初心者」という名前は名前の時点で自分のPC経験などを相手に強く印象づけるので皆さん使ってるんじゃないでしょうか。見る限り同じ名前や類似した名前はたくさんありますよね。ただ上級者なのに初心者って名前つける人はあんましいないと思います。
Re:原点
Posted: 2008年11月20日(木) 18:18
by 御津凪
> もっと、区別のつきやすいハンドルにして欲しいですよね。
継続して掲示板を利用するなら、誰なのかを特定しやすい名前にしたほうが良いですね。
これを機に改名して判別しやすくしておいたほうがいいと思います。
# 改名するなら一度
http://www.play21.jp/board/ranking.cgi?id=dixqを確認して、存在しない名前を考えるのがいいでしょうね。
# 初心者と名乗る方 が 中級者 の称号というのも明らかに矛盾ですし。
そうそう、
原点の設定は CDC::SetViewportOrg でできそうですよ。
(このあたりは MSDN あたりで調べればすぐに見つかりそうですが…)
Re:原点
Posted: 2008年11月20日(木) 18:31
by 初心者
どうもありがとうございました。関数はわかったのでやってみます。MSDNとかいうのは初めて聞きました。
私は中級者になってますが質問ばかりしてるだけです。まだ始めたてのぺーぺーです。ですのでポイントや称号で
判断はできないと思いますよ。特にこだわりがあるわけじゃないのですが誰なのか特定できたほうが回答者さんにとってやはり都合がいいんですかね。規約の複数の名前所持ってのにひっかかりそうで控えてるんですが。
大丈夫そうなら考えてみますね。
Re:原点
Posted: 2008年11月21日(金) 11:08
by 初心者
SetViewportOrgについて色々調べてみたんですがほとんどの方が使っておられるのはSDIのOnDraw関数の中で使っています。ダイアログベースだとこれは使えないみたいなのですがダイアログベースでの使い方がいまいちわかりません。
Re:原点
Posted: 2008年11月21日(金) 11:25
by バグ
ダイアログベースアプリの場合は、たしかOnPaintじゃなかったですか?
Re:原点
Posted: 2008年11月21日(金) 11:55
by バグ
というか、CDCクラスのメンバ関数の話な訳ですから、OnDrawとか、OnPaintとか、SDIとかダイアログとか関係ないですよね。
デバイスコンテキストを取得して、それに対して操作してやればいい訳ですから…
デバイスコンテキストに関する機能を使いやすくまとめてあるのがCDCクラスです。
CDCクラスはこれまでに何度も使ってきていますよね?
ちなみに、こちらでもテストしてみましたが、問題なく使用できました。
Re:原点
Posted: 2008年11月21日(金) 12:21
by 初心者
CClientDC dc(this);
dc.SetViewportOrg(200,200);
でエラーはでないんですが全く変化がない・・
入れる場所が悪いんですかね。void :: ONOK(){
のすぐ後ろに入れてるのですが。CDCクラスはこれまでに1度か2度使った程度だった気がします。
Re:原点
Posted: 2008年11月21日(金) 13:13
by バグ
えっ!?なぜ、OnOKの中なんですか?(^_^;)
OnOKは通常、ダイアログが終了する際に呼ばれるハンドラだと思いますが…。
前から気になっていたのですが、初心者さんはどの程度、C++(VC++ではありません)とWindowsプログラミングについて理解がありますか?
例えば、MFCを使用したプログラムを書くならば、最低限でもクラスの知識は必須ですし、ダイアログベースのアプリを作りたいならば、イベントドリヴンについての理解も必要になってきます。
失礼ですが、この辺りの事をほとんど理解できてないままに、コーディングしているように感じるのですが…
動かない、分からない事が起こるたびにここに聞きに来ていたのでは、非効率的ですしね。
C++の基礎について勉強したければ、下記の本が分かり易いかな?
http://www.amazon.co.jp/%E3%83%93%E3%82 ... 4872835441
VC++6.0の基本的な勉強にはこちらの本なんかがオススメですよ。中古なら随分安いみたいですしね。
http://www.amazon.co.jp/%E6%96%B0Visual ... 479730975X
Re:原点
Posted: 2008年11月21日(金) 13:34
by 初心者
私が勉強したのは
http://www.cbook24.com/shop/productdeta ... u=99913881です。
どんなクラスありどんなメンバ関数を持つというのはある程度わかってるのかな。
文の組み立て、プログラムの構成、ポインタ当たりがサッパリなんだとおもいます
闇雲に本をどばっとやっても非効率だと思いますし。1つ1つわからないことがあったら聞いて理解していくのが
一番だと思っているのですが。
Re:原点
Posted: 2008年11月22日(土) 15:57
by バグ
教えてくれる人ありきな、その考え方は賛同できません。
分からない事を調べる能力を鍛える方がよほど効率的です。
ただ、初心者さんの場合は、もう少し前の段階である(ご自身も書かれていた文法やポインタなど)基礎を固める方が先決だと思います。それこそ、無闇に本を読むのも効果的ではないでしょうか?無論、自分でコーディングしてのトライ&エラーは必須ですけどね。
これ以上は水掛け論になりそうなので止めておきます。キツイ書き方をしてすみませんでした。
Re:原点
Posted: 2008年11月25日(火) 11:22
by 初心者
お言葉ですが、それは上級者の考え方でしょう。文法、関数、基礎などは本やサイトでわかりますが
それ以外のことは載ってないです。ただ、課題が与えられその回答を導き出す為にこの原点移動が必要だったわけです。私からすればこの課題を終わらすのに何冊もの本を長い時間かけて読み尽くし、さらにプログラムを仕上げるのにも時間をかける、なんてことはできません。もてる知識と人に聞いたり、調べたりでやりくりするしかありません。
少なくとももっと勉強してから来いみたいなこと言われるとどうしようもありませんので、情けないようですが
見捨てないようおねがいします。キツイ言い方ではないのですがこのサイトで質問しずらくなるんで・・書かせていただきました。それではまたわからない所あったらお願いします。ある程度調べてから質問しますので。
Re:原点
Posted: 2008年11月25日(火) 12:12
by バグ
私が言いたかった事は、MFCを使ってプログラムを書きたいならば『ポインタやクラスの概念は最低限知っておかなければいけない』という事だったんですが…
課題を出した方へは質問されてみましたか?
それで、解説してもらえないという事であれば、その出題者の方は私と同じ考え方だと思いますよ。
自分自身で解決する能力を養ってほしいのだと思います。
上級者の考えだと思うのは結構ですが、私も本格的にプログラムを始めて2年足らずなのはご理解下さい。
これまでに書き込みさせていただいた内容は私自身の少ない経験から言わせてもらっています。
闇雲に本を読み、サンプルを自分で打ち込み、少し変更してエラーが出たら、何故エラーが起こったのかを調べる…これを繰り返しての今です。
確かに非効率的だとは思いますが、よほどの天才でもなければ、結局はこれが近道でもあると思うんですね。
それでは、頑張ってください(^-^)