0

ScreenSaverProcたとえば、を使用して、に渡された HWND からデバイス コンテキストを取得する win32 スクリーン セーバー アプリケーションがありますBeginPaint

今、同じコードを使用してスクリーン セーバーのビデオを作成したいと考えています (を使用していますffmpegが、それは関係ありません)。私がやりたいのは、ScreenSaverProc(実行する代わりにlibscrsave)呼び出すコードの周りにラッパーを配置し、ある種の仮想ウィンドウを渡すことです。これにより、通常と同じ方法でデバイスコンテキストを取得してペイントできますですが、ラッパー コードでデバイス コンテキストのビットマップを取得し、それをビデオのフレームにコピーできます。

そのような仮想ウィンドウを作成する方法はありますか? 通常のウィンドウを作成して非表示のままにするだけで機能しますか?

4

1 に答える 1

0

スクリーン セーバーを、デバイス コンテキストを取得するシン ラッパー関数に構造化してから、別の関数を呼び出して DC への描画を行います。

void On_WmPaint() { 
    HDC dc = BeginPaint();
    // ...
    do_draw(dc);
    EndPaint();
}

void do_draw(HDC dc) { 
  // ...
}

次に、ビデオのフレームを作成する場合は、CreateCompatibleDC (1 つの可能性として) を使用して、画面と互換性のある DC を作成できます。次に、CreateCompatibleBitmap を使用してビットマップを作成します (これも画面と互換性があります)。そのビットマップを DC に選択し、 を呼び出しdo_drawて、その DC を渡します。これにより、選択したビットマップが DC に描画されるため、後でビットマップを使用して希望することができます。

于 2013-10-19T07:47:19.737 に答える