やまだです。ヨロシクです。
Q.お絵かきソフト(マウスをドラっグすると線を表示)
の描画のタイミングは、一般的にどのようにするのでしょうか?
mousemoveのつどおこなうのではなく、ゲームプログラミングみたいに
一定時間ごとに描画するのかと想像しているのですが
ありがとうございました。
単純なストロークを描画する場合はWM_MOUSE_MOVEで直接書いている
アプリがほとんどです。このときのDCはキャッシュDCになります。
また、入力時の描画座標は保管しておいてWM_PAINT時に再現させます。
アンチエイリアシング等の、ちょっと複雑な描画が必要な場合はアプリ
の性質や、ターゲットとしているPCの処理速度に影響されていろいろです。
1.ボタンUpで再描画(InvalidateRect())するタイプ
(遅いPC用/線画アプリ系)
2.裏のスレッドで同時処理しながら、処理済矩形の再描画も
やっちゃってるやつ(早いPC用/ビットマップ画系)
等があります。お説のタイプはどちらかというと2.でしょうか。
このタイプを遅いPCで実行するとリアルタイムに描画しようと
がんばるのですが、処理結果の描画がやや遅れます。
1.のタイプはボタンUpまではキャッシュでリアルタイム処理は
しないか、簡略なものを行います。ボタンUp後に、きれいに描画
しなおします。
やまだです。
ご返信ありがとうございます。
私のアプリは、背景画像の上にタブレットを使って描きます。
消しゴムでフリーハンドのラインのみを消せます。
(ActiveXでWebから描けます。)
MOUSEMOVEメッセージをフックしてInvalidateしているため,
MOUSEMOVE,PAINTのメッセージの嵐でした。
MS PAINTアプリは、HITTESTメッセージが10個くらいつづき
MOUSEMOVEが1つ、PAINTメッセージが1つというサイクルを
繰り返していました。
とにかくご返信ありがとうございました。
InvalidRect処理をいれて様子をみることにいたします。