- ベストアンサー
MFCでMSペイントみたいなツールを作りたい
はじめまして。 今、MFCの学習をし始めたばかりです。 学習の最終目標の成果物としましては、 MSペイントに近いアプリを作成することです。 でもまずは簡単な機能(線、矩形、円、自由線の描画、色換え)から着手する予定です。 つきましては、参考になるサイト、書籍、その他アドバイス等あれば、ご教授頂けると助かります。 環境はVisualStudio2005のMFCです。 お願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
MSDNに"そのまんま"のサンプルがあります。 URL参照。
その他の回答 (3)
- machongola
- ベストアンサー率60% (434/720)
こんばんは。ペイントソフトは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>だけは、止めて置いた方が無難だと思います。 ・・・とまぁ、色々あって全然書き切れないのですが、取り敢えず「実に面倒」な部分は、今まで挙げて来た部分でしょうか。先ずは、気軽に作って見ては如何でしょう。
お礼
ありがとうございます。 正直、現時点では知識が足りなすぎて、ピンときていないですが、 後に役立ちそうな気がします。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> まんまというのはMSペイントまんま?? なわけない ^^; こいつをベースにすればDraw系ツールの たいていのことができるはず。
お礼
ありがとうございます。 MSDNでサンプルがあるんですね。 ここまで作られた手順が知りたいですが、自力で解析しろって感じですかね。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
失礼、貼りそこねました。
お礼
回答ありがとうございます。 そうなんですか!? まんまというのはMSペイントまんま??