
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 …
もちろん、徹底して自作しても良いでしょう。
・その他、思いついた事を記載させていただきます。
(1)何をするにも「STL」辺りは必須になってくるかもしれません。
これは、
p = new Class(...)
とか、
p = (xxx*)::malloc(...)
//pを使う
//遠く離れた所で
//pのサイズを拡大する
などと言う事を繰り返していると、その内失敗します(大変な事になる)。
(2)SetPixel()/GetPixel()を使用しない事でしょうか(重たいので画像処理には向かないです)。
(3)復元機能が有るなら、そちらを先にやらないと厳しいかもしれません(データ構造の要素にグラフィックバッファを格納し、其れをイテレータで参照して描写する事に成るかもしれません)。
(4)画像変換入出力と描画ツールの具象クラスは、DLLに置いた方が良いかもしれません。
(5)参照カウンタ式のスマート「ポインタ・リソース」位は無いときついかもしれません。
諸事情の理由によって、此の場合は「開放」して、此の場合だけは「開放」しない・・・。
こう言った事を繰り返しているうちに「メモリ・リソース」リークが生じたりします。そう言った事を無くす為にもスマート「ポインタ・リソース」があります(完全ではないが)。
ネットで検索していれば、誰かしら作っているかもしれませんが、「BOOSTライブラリ」に数種類スマートポインタがあるので、手っ取り早くそれを持って来るか、テンプレートメタプログラムして、自分で実装するかです。
ただし、標準のstd::auto_ptr<T>だけは、止めて置いた方が無難だと思います。
・・・とまぁ、色々あって全然書き切れないのですが、取り敢えず「実に面倒」な部分は、今まで挙げて来た部分でしょうか。先ずは、気軽に作って見ては如何でしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SwingとEDT(イベントディスパッ...
-
VS Treeview のデザイン変更
-
C# DataGridView のCellPaintin...
-
VB.NET フォーム上に描いたグ...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
中学のクラス数
-
0歳児の指しゃぶりに関して
-
スーパークラスからサブクラス...
-
変数名の付け方
-
標準モジュールとクラスモジュ...
-
関数内の変数に<summary>コメン...
-
僕の出身中学校は200人同級生が...
-
引数で日付を2つ与え、その間の...
-
UMLのクラス図はmain()も含むん...
-
エクセルVBAにおけるON TIMEメ...
-
Excel VBA シェイプの原型のサ...
-
VBPをダブルクリックするとたま...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVAでの背景画像表示
-
SwingとEDT(イベントディスパッ...
-
VB.NET フォーム上に描いたグ...
-
Labelコントロールの背景をグラ...
-
C# DataGridView のCellPaintin...
-
Javaで文字の角度を変えて表示...
-
Java、jPanelに描画する
-
canvasで表示されてる画像を1...
-
javascriptのライブラリーで、...
-
画面のちらつきの原因が知りた...
-
JOGLで描画した立方体の中心座標
-
Java Script 色を塗れるプログ...
-
C# リストビューの特定のセルの...
-
VB.NETのSendMessageを教えてく...
-
Canvas等の図形を移動する時,直...
-
このプログラミングをどう組み...
-
ドラッグして矩形を描くには
-
GDI+で描画した画像を消去する...
-
重なった要素上でのイベントで...
-
getGraphics()の意味を教えて...
おすすめ情報