お絵かきソフトの基本的な描画方法をしりたい

解決


やまだ  2010-02-16 18:04:32  No: 71407  IP: [192.*.*.*]

やまだです。ヨロシクです。

Q.お絵かきソフト(マウスをドラっグすると線を表示)
  の描画のタイミングは、一般的にどのようにするのでしょうか?
  
  mousemoveのつどおこなうのではなく、ゲームプログラミングみたいに
  一定時間ごとに描画するのかと想像しているのですが
    
ありがとうございました。

編集 削除
仲澤@失業者  2010-02-16 20:05:52  No: 71408  IP: [192.*.*.*]

単純なストロークを描画する場合はWM_MOUSE_MOVEで直接書いている
アプリがほとんどです。このときのDCはキャッシュDCになります。
また、入力時の描画座標は保管しておいてWM_PAINT時に再現させます。

アンチエイリアシング等の、ちょっと複雑な描画が必要な場合はアプリ
の性質や、ターゲットとしているPCの処理速度に影響されていろいろです。

1.ボタンUpで再描画(InvalidateRect())するタイプ
    (遅いPC用/線画アプリ系)
2.裏のスレッドで同時処理しながら、処理済矩形の再描画も
    やっちゃってるやつ(早いPC用/ビットマップ画系)

等があります。お説のタイプはどちらかというと2.でしょうか。
このタイプを遅いPCで実行するとリアルタイムに描画しようと
がんばるのですが、処理結果の描画がやや遅れます。

1.のタイプはボタンUpまではキャッシュでリアルタイム処理は
しないか、簡略なものを行います。ボタンUp後に、きれいに描画
しなおします。

編集 削除
やまだ  2010-02-16 21:10:42  No: 71409  IP: [192.*.*.*]

やまだです。
ご返信ありがとうございます。

私のアプリは、背景画像の上にタブレットを使って描きます。
消しゴムでフリーハンドのラインのみを消せます。
(ActiveXでWebから描けます。)

MOUSEMOVEメッセージをフックしてInvalidateしているため,
MOUSEMOVE,PAINTのメッセージの嵐でした。

MS PAINTアプリは、HITTESTメッセージが10個くらいつづき
MOUSEMOVEが1つ、PAINTメッセージが1つというサイクルを
繰り返していました。

とにかくご返信ありがとうございました。
InvalidRect処理をいれて様子をみることにいたします。

編集 削除