我正在构建一个Delphi组件,用于在VCL窗体上嵌入SDL渲染图面。只要表单在创建SDL曲面时显示在屏幕上,它就可以正常工作。否则,它不能创建任何渲染纹理。
我跟踪到SDL代码,并以以下函数调用结束,该函数调用失败(返回NULL):
data->hbm = CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS, &data->pixels, NULL, 0);HDC是指向绘图上下文的有效句柄,该句柄由具有自己的HWND窗口句柄的控件拥有,该控件已正确设置。但是,当控件在屏幕外创建时(在Delphi中通常会发生这种情况)(所有窗体及其控件都是在隐藏状态下创建的,直到可以显示它们为止),CreateDIBSection调用将失败,直到控件真正可见为止。
此外,如果它是在屏幕上创建的,那么在这个过程中,我创建的任何纹理都会被隐藏和重新显示(例如,如果它在标签页上,并且我切换了标签)。
这快把我逼疯了。有人知道这是怎么回事吗?我该怎么解决呢?
发布于 2016-07-06 04:29:01
绘图上下文仅在绘图处理期间有效。
https://stackoverflow.com/questions/682980
复制相似问题