• 締切済み

VC++のちらつき防止方法

いつもお世話になっております。 ただいまVC++をもちいてアプリを作っておりますが画面がちらつきを押さえたく、質問させていただきます。 現在、STATICな領域がありまして、その中に文字を書いているのですが、 時間経過とともに文字が変わるものがあります。 その際、背景黒に白文字で以下のようにしています。 ::ShowWindow(hoge,hogehoge,SW_HIDE); ::SetDlgItemText(hoge,hogehoge,text); ::ShowWindow(hoge,hogehoge,SW_SHOW); とやっておりますが、スタティック領域全体が一瞬白くなってから 更新されます。 結構頻繁に更新するので、ちらつきが結構目立ってしまいます。 invalidateなどもやってみたのですが同様にちらついてしまいました。 なんとか改善したいのですが何か方法はありますでしょうか? アドバイスよろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

私なら #2氏のように ShowWindowの SW_HIDE/SW_SHOWをやめて更新の頻度を抑える方向で考えます 単純なカウンタを用意して10回に1回更新する 更新イベントが停止したら最終的なデータで更新する といった具合です …

回答No.3

 こんにちは。  ビットマップハンドルを一つ作成しておいて、それに向かってテキストを書き込んだ後、スタティックウィンドウに表示すれば出来るのではないでしょうか。  //遠くで作成しておく  HBITMAP g_hBmpBackBuffer;  HPEN g_hPen;  HBRUSH g_hBrush;  //・  //・  //・  //テキストを書く時  HDC hDCBackBuffer = ::CreateCompatibleDC(NULL);  HDC hDCStatic = ::GetDC(hWndStatic);  ::SelectObject(hDCBackBuffer, g_hBrush);  ::SelectObject(hDCBackBuffer, g_hPen);  ::DrawText(hDCBackBuffer, , , , pszText);  ::BitBlt(hDCStatic, , , , hDCBackBuffer, , , );  ::ReleaseDC(hWndStatic, hDCStatic);  ::DeleteDC(hDCBackBuffer);

  • goo39
  • ベストアンサー率36% (13/36)
回答No.2

とりあえずShowWindow()のSW_HIDEとSW_SHOWの両者を止めてSetDlgItemText()だけにしてみましょう。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

「裏画面」とか「ダブルバッファリング」とか「ちらつき防止」とかで検索をかけてみては?

関連するQ&A