Maestro マップ描画の手法

 結局Bitmapを仮想画面として用意し、描画はそこに行います。そして、ApplicationのIdle時に一定間隔でOnPaintを呼び出し(実際にはInvalidate()を呼ぶ)、その中で、ビットマップをフォームのCanvasに直接描画する方法で解決しました。
 ただしデフォルトの状態ではフォームは描画されるたびにクリアされ、そのたびにマップが点滅してしまうので、それを回避するためには以下の方法を使いました。

  1. MDIChild内にこんな関数宣言を用意。
    void __fastcall WMEraseBkgnd(TWMEraseBkgnd &msg);
  2. MDIChildの宣言内に以下の記述をして、WM_ERASEBKGNDメッセージをマップする。
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_ERASEBKGND,TWMEraseBkgnd,WMEraseBkgnd)
    END_MESSAGE_MAP(TForm)
  3. その関数はこんな感じ。
    void __fastcall TMDIChild::WMEraseBkgnd(TWMEraseBkgnd &msg)
    {
        msg.Result= 1;
    }

 コレで背景がいちいち消されなくなります。

 この手法はC++Builderによるプログラミングのページの『マップメーカー』のソースを参考にさせていただきました。というか、そのままです(笑)

Back.