1

我正在构建一个 Delphi 组件以在 VCL 表单上嵌入SDL渲染表面。只要在创建 SDL 表面时表单在屏幕上,它就可以正常工作。否则,它无法创建任何渲染纹理。

我追踪到 SDL 代码并最终得到以下函数调用,但失败(返回 NULL):

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

HDC 是绘图上下文的有效句柄,该句柄由具有自己的 HWND 窗口句柄的控件拥有,该句柄已正确设置。但是当控件在屏幕外创建时,这通常发生在 Delphi 中,(所有窗体及其控件都在隐藏状态下创建,直到显示它们) CreateDIBSection 调用将失败,直到控件实际可见。

此外,如果它是在屏幕上创建的,然后隐藏并重新显示(例如,如果它在选项卡上并且我切换选项卡)我创建的任何纹理在此过程中都会被空白。

这让我发疯了。任何人都知道发生了什么以及我该如何解决它?

4

1 回答 1

0

绘图上下文仅在 Paint 处理期间有效。

于 2016-07-05T20:29:01.323 回答