none
Visual C++でも画面更新 RRS feed

すべての返信

  • 自分で作成したWindowの描画処理を、
    以下のMessage Handlerで定期的に行いたい、ということでしょうか。

      CWnd::OnPaint
      CWnd::OnEraseBkgnd
      CView::OnDraw 

    Timerや、Sub Threadで更新を指定する方法があります。

    [Timer]
      CWnd::SetTimer
      ※更新頻度が早い場合、Timerでは追いつかないかも知れません。

    [Thread]
      AfxBeginThread

    Timerで再描画の指定する場合は、以下のMethodを呼びます。

      CWnd::Invalidate
      CWnd::
    InvalidateRect
      CWnd::InvalidateRgn

    すぐに描画処理を行いたい場合は、InvalidateXXXの後に以下のMethodを呼びます。
      CWnd::UpdateWindow

    もしくは、CWnd::RedrawWindowで纏める事もできます。

    何れも詳しい情報は、MSDN Libraryを参照してください。
    • 編集済み kozz 2010年2月23日 8:26 typo
    • 回答の候補に設定 高橋 春樹 2010年2月25日 7:40
    2010年2月23日 8:21
  • Visual C++でアプリ作成時(MFC使用)常時、画面を更新するにはどうすれば良いでしょうか?
    前回も書きましたが、情報が足りません。
    どういう事をしたいから画面の更新を常時行ないたいのかまで書いた方がやりたい事が伝わりやすいです。
    質問をされている御本人には自明だと思いますが、掲示板では書かれていない事は伝わりません。

    一般的に単純なアプリケーションでは常時画面を更新するような事はしません。
    画面更新はそれなりに重い処理になりますから画面のチラつき等も考えると可能な限り、
    最小限の画面更新で済ませようとするのが普通です。
    普通でないケースとしてアクションゲーム等のように動きの激しい画面を扱うソフトも
    ありますが、そういう特別な事情がなければ常時更新させると言う事はしないと思います。

    アクションゲームとか動画再生に近い事をしようと考えているのであれば、
    メインスレッドでそういう処理を行ってしまうとユーザーオペレーションが聞かなくなりますから
    既に書かれているように別スレッドで描画すると言うような事も考える必要があるかもしれません。

    また、高速描画必要なのであればDirectXやOpenGLと言った描画用のライブラリの使用も
    検討する必要があるかもしれません。
    いずれにせよ、何をやりたくてどの程度の画面更新をしたいと考えているのかが、
    伝わるようにもっと情報を示してください。
    今の質問の仕方では結局、こちら側で推測するしか無いので
    検討する必要がない部分まで検討する必要が出てしまい、効率が悪いです。


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2010年2月26日 7:33
  • OnPaintの中でInvalidateRectを呼び出せば画面が更新され続けるはずです。
    趣味でブログを書いています。よろしくお願いします。 http://kzpro.iga-log.com/
    2010年4月3日 8:51