当窗口在屏幕外时,为什么CreateDIBSection()会失败?

时间:2009-03-25 18:59:04

标签: delphi winapi graphics sdl

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

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

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

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

此外,如果它是在屏幕上创建的,那么隐藏并重新显示(例如,如果它位于标签页上,我切换标签页),我创建的任何纹理在此过程中都会被消隐。

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

2 个答案:

答案 0 :(得分:0)

只是一个想法....你看过窗户处理了吗?不是它被屠杀和重建吗?

答案 1 :(得分:0)

绘图上下文仅在“绘制”处理期间有效。