• ベストアンサー

MFCでMSペイントみたいなツールを作りたい

はじめまして。 今、MFCの学習をし始めたばかりです。 学習の最終目標の成果物としましては、 MSペイントに近いアプリを作成することです。 でもまずは簡単な機能(線、矩形、円、自由線の描画、色換え)から着手する予定です。 つきましては、参考になるサイト、書籍、その他アドバイス等あれば、ご教授頂けると助かります。 環境はVisualStudio2005のMFCです。 お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MSDNに"そのまんま"のサンプルがあります。 URL参照。

goopon
質問者

お礼

回答ありがとうございます。 そうなんですか!? まんまというのはMSペイントまんま??

その他の回答 (3)

回答No.4

 こんばんは。ペイントソフトは4つ程作成した事があります。  私もMSペイントをお手本にしていた時期があります。シンプルなのですが、以外に大変です。  ただ、MFCを使用するようなので、その点では作業量は低減されると思います。 >>でもまずは簡単な機能(線、矩形、円、自由線の描画、色換え)から着手する予定です。 (1)線、矩形、円、自由線の描画  C++で抽象化した方が楽でしょう。  入門書籍に良く出てくる文句に以下の様なものがあります。  class IShape  {  public:  virtual void Draw() = 0;  };  class CBox : public IShape  {  public:  virtual void Draw(){//□を描く}  };  class CCircle : public IShape  {  public:  virtual void Draw(){//○を描く}  };  こう言った事は、「オーバーライドの必要性を説く為に書かれたもの」なので、応用は出来ますが、実際には此の程度で済む程、単純な物ではないです。  「クリックして、ひっぱって、放すと描写される」をしますので、マウスのキャプチャーもバックバッファリングも必須になってきます。  兎に角、これらの取り扱いに慣れる必要があるかもしれません。  此処でのポイントは、後々に備えて「伸縮倍角」が変化する事も含めた作成しておく事でしょうか。  後になって「虫眼鏡」の機能を追加する時、座標計算の方法を修正するのも大変です。 (2)色換え  MSペイントで「色彩ダイアログ」がありますが、これは「コモンダイアログ」の一つで、直にでも使う事が出来ます。  「CColorDialog]  http://msdn.microsoft.com/ja-jp/library/6w6cd538(VS.80).aspx  もちろん、徹底して自作しても良いでしょう。 ・その他、思いついた事を記載させていただきます。 (1)何をするにも「STL」辺りは必須になってくるかもしれません。  これは、  p = new Class(...)  とか、  p = (xxx*)::malloc(...)  //pを使う  //遠く離れた所で  //pのサイズを拡大する  などと言う事を繰り返していると、その内失敗します(大変な事になる)。 (2)SetPixel()/GetPixel()を使用しない事でしょうか(重たいので画像処理には向かないです)。 (3)復元機能が有るなら、そちらを先にやらないと厳しいかもしれません(データ構造の要素にグラフィックバッファを格納し、其れをイテレータで参照して描写する事に成るかもしれません)。 (4)画像変換入出力と描画ツールの具象クラスは、DLLに置いた方が良いかもしれません。 (5)参照カウンタ式のスマート「ポインタ・リソース」位は無いときついかもしれません。  諸事情の理由によって、此の場合は「開放」して、此の場合だけは「開放」しない・・・。  こう言った事を繰り返しているうちに「メモリ・リソース」リークが生じたりします。そう言った事を無くす為にもスマート「ポインタ・リソース」があります(完全ではないが)。  ネットで検索していれば、誰かしら作っているかもしれませんが、「BOOSTライブラリ」に数種類スマートポインタがあるので、手っ取り早くそれを持って来るか、テンプレートメタプログラムして、自分で実装するかです。  ただし、標準のstd::auto_ptr<T>だけは、止めて置いた方が無難だと思います。  ・・・とまぁ、色々あって全然書き切れないのですが、取り敢えず「実に面倒」な部分は、今まで挙げて来た部分でしょうか。先ずは、気軽に作って見ては如何でしょう。

goopon
質問者

お礼

ありがとうございます。 正直、現時点では知識が足りなすぎて、ピンときていないですが、 後に役立ちそうな気がします。

回答No.3

> まんまというのはMSペイントまんま?? なわけない ^^; こいつをベースにすればDraw系ツールの たいていのことができるはず。

goopon
質問者

お礼

ありがとうございます。 MSDNでサンプルがあるんですね。 ここまで作られた手順が知りたいですが、自力で解析しろって感じですかね。

回答No.2

失礼、貼りそこねました。

参考URL:
http://msdn.microsoft.com/ja-jp/library/92y4h944.aspx