2009-03-25 10 views
1

SDLレンダリングサーフェスをVCLフォームに埋め込むためのDelphiコンポーネントをビルドしています。これは、SDLサーフェスが作成された瞬間にフォームがオンスクリーンである限り、うまく動作します。それ以外の場合は、レンダリングテクスチャを作成できません。ウィンドウがオフスクリーンのときにCreateDIBSection()が失敗するのはなぜですか?

私はSDLコードにトレースして失敗し、次の関数呼び出し、になってしまった(NULLを返します):

data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0); 

HDCが持つコントロールが所有する描画コンテキストに有効なハンドルでその独自のHWNDウィンドウハンドルが正しく設定されています。しかし、コントロールがオフスクリーンで作成されたとき(Delphiで一般的に起こる)、コントロールの実際の表示まで、CreateDIBSectionの呼び出しは失敗します(コントロールがあるすべてのフォームが非表示の状態で作成されます)。

また、画面上に作成され、非表示にして再表示された場合(タブシート上にあり、タブを切り替えるなど)、作成したテクスチャはこのプロセス中に空白になります。

これは私をナットにしています。誰が何が起こっているのか、私はそれを回避する方法を知っていますか?

答えて

0

ただのアイデア....ウィンドウハンドルを見ましたか?それは屠殺され、再作成されていますか?

+0

Nope。 DestroyWndは決して呼び出されません。 –

-1

描画コンテキストは、ペイント処理中のみ有効です。

+0

「塗装処理」とは何ですか?それはいつ起こるのですか? –

+0

"ペイント"処理は、コントロールのPaintメソッド(WM_PAINTメッセージに応答してPaintWindowによって呼び出される)にあることを意味します。 PaintWindowは、コントロールのデバイスコンテキストハンドルを初期化するものです。 –

+0

この場合、あなたの答えは間違っています。 –

関連する問題