再描画時のちらつきを直したい – 固定ページ 2 – プログラミング – Home

再描画時のちらつきを直したい
 
通知
すべてクリア

[解決済] 再描画時のちらつきを直したい

固定ページ 2 / 2

たまお
 たまお
(@たまお)
ゲスト
結合: 17年前
投稿: 20
Topic starter  

ご返答ありがとうございます。
追記いたします。
gFlgをOnDraw内で更新しているのは・・・
OnDrawが、クリックイベント以外から呼ばれる場合も考慮しての事です。
それ自体に問題はないので、気にしないでください。
問題は、ScrollWindowExから、OnDrawが呼ばれた場合に、
pDC->FillSolidRectの処理実行が、表示に反映されないことなので
よろしくお願い致します。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

だとすると、クリッピングされてるか、逆にOnDrawが偶数回呼ばれているか?

# むぅ、なんか手元ではうまく再現しない…。


返信引用
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

> ScrollWindowEx( 5, 5, NULL, NULL, NULL, NULL, ( SW_INVALIDATE | SW_ERASE));
クライアント領域のサイズを(320, 240)と仮にした場合、この関数が行っている事は

1、現在ウィンドウに表示されているイメージ(座標でいうと[0, 0, 320, 240])を
  [5, 5]移動した位置[5, 5, 320(計算上は325), 240(同245)]にコピー
2、InvalidateRect(CRect(0, 0, 5, 240));
  InvalidateRect(CRect(0, 0, 320, 5));

と同じような感じになる。(全く上記の通りとは言ってないよ)
つまり、ScrollWindowEx() によって OnDarw() が呼ばれた時に書き込みが反映される
領域は CRect(0, 0, 5, 240) と CRect(0, 0, 320, 5) 内のみ。

なので、
 pDC->FillSolidRect(10, 10, 100, 100, RGB(255, 0, 0));
 pDC->FillSolidRect(10, 100, 100, 200, RGB(0, 0, 255));
と書き込みが反映される領域外に書いても画面上は 赤<->青 とは変わらない。
単純に ScrollWindowEx() コール前に表示されていた画面イメージが右下にズレていくだけ。

> 問題は、ScrollWindowExから、OnDrawが呼ばれた場合に、
> pDC->FillSolidRectの処理実行が、表示に反映されないことなので
よってこれは正常な動作となる。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

gakさんが書かれてる通りですね。描画対象になってない。

# 再現おかしいの当然だ、デバッガで止めたら駄目ジャン…アホだorz>自分


返信引用
愛飢え男
 愛飢え男
(@愛飢え男)
ゲスト
結合: 17年前
投稿: 8
 

…過去ログ検索してみたのかと、子一時間(ry


返信引用
たまお
 たまお
(@たまお)
ゲスト
結合: 17年前
投稿: 20
Topic starter  

皆様、ご返答ありがとうございました。
よく理解できました。
感謝いたします。
また、よろしくお願い致します。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました