我不完全是 Windows 编程专家 ;) 如果这个问题是微不足道的,请原谅。
我有一个要在其上显示位图的窗口。位图可以拉伸以跨越整个区域,也可以以原始纵横比显示,空白区域将用实心画笔填充。
我使用 LoadImage 加载位图并使用 BitBlt 显示它。我在 WM_ERASEBKGND 上执行此操作,我使用来自 wparam 的 DC,它是一个 mem DC。
当需要拉伸位图时,我正在考虑使用 StretchBlt 而不是 BitBlt。
所以我的问题是:
可以将位图存储为 HBITMAP 还是应该使用 DIBSection?哪一个在性能方面更好,这两种解决方案的内存占用是多少?
在 WM_ERASEBKGND 上绘制到 DC 时,我应该始终拉伸位图,还是应该使用预先计算的拉伸位图创建兼容的 DC(或位图),然后将其 BitBlt 到目标 DC?
如果我创建一个预先计算的位图,我应该立即卸载原始位图以节省内存吗?
我应该使用 BitBlt/StretchBlt 还是 CopyImage?
我读到我也可以使用具有所需宽度和高度参数的 LoadImage,以便加载的图像已经被拉伸,这个解决方案更好吗?
对于一些代码示例,我将不胜感激。
编辑:
也欢迎 GDI+ 解决方案。我对这个问题的最佳、最简单和最佳性能的解决方案感兴趣。