Ich baue eine Delphi-Komponente, um eine SDL Rendering-Oberfläche in ein VCL-Formular einzubetten. Es funktioniert problemlos, solange das Formular in dem Moment auf dem Bildschirm angezeigt wird, in dem die SDL-Oberfläche erstellt wird. Andernfalls können keine Rendering-Texturen erstellt werden.Warum schlägt CreateDIBSection() fehl, wenn das Fenster nicht angezeigt wird?
ich in den SDL-Code verfolgt und mit dem folgenden Funktionsaufruf am Ende, die fehlschlägt (NULL zurück):
data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);
Der HDC ein gültiges Handle auf die Zeichnung Kontext von einer Steuer Besitz ist, der hat seine eigenes HWND-Fensterhandle, das richtig eingerichtet wurde. Wenn das Steuerelement jedoch außerhalb des Bildschirms erstellt wird, was häufig in Delphi geschieht (alle Formulare mit ihren Steuerelementen werden in einem ausgeblendeten Status erstellt, bis sie angezeigt werden), wird der CreateDIBSection-Aufruf fehlschlagen, bis das Steuerelement tatsächlich sichtbar ist.
Auch wenn es auf dem Bildschirm erstellt, dann ausgeblendet und wieder angezeigt wird (wenn es auf einer Registerkarte ist und ich z. B. Tabs), werden alle Texturen, die ich erstelle, während dieses Prozesses ausgeblendet.
Das macht mich verrückt. Wer weiß was vor sich geht und wie ich es umgehen kann?
Nein. DestroyWnd wird nie aufgerufen. –