我有一个用C++
,MFC
编写的遗留系统。
我正在检查用LoadBitmap()
API替换LoadImage()
的代码段。代码中写的注释表示“LoadBitmap()
使用来自内核内存的分页池,如果使用率达到最大限制,则会弹出绘制问题。因此应使用LoadImage
API”。
我在谷歌上搜索了一下,但没有得到太多信息。当我检查MSDN时,他们说“请注意,不推荐使用LoadBitmap加载OEM位图,仅支持向后兼容性”
我的问题是:
1. LoadBitmap()
API是否存在任何问题?为什么我们更喜欢LoadImage()
而不是LoadBitmap()
?
2.什么是OEM bitmaps
?如果我使用LoadBitmap
加载普通BMP,是否有任何问题?
答案 0 :(得分:3)
LoadBitmap()仅创建与显示兼容的位图,而不是与设备无关的位图(DIB)。而且,正如LoadBitmap() documentation本身所说的那样,“此函数已被 LoadImage 函数取代”。令人惊讶的是,LoadBitmap()仍然存在,因为我认为自Windows 95以来它已经被LoadImage()取代了!(只是为了表明降低向后兼容性有多么困难!)
OEM位图是系统范围的预定义图像,可以通过传递NULL hInstance参数和魔术lpBitmapName(如OBM_BTNCORNERS,OBM_CHECKBOXES等)来请求。 Windows使用这些使用来绘制UI的各个部分,但现在由DrawFrameControl()处理。再一次,OEM位图是一个古老的东西,“新”行为已经存在了很长时间。
除非您有充分的理由想要使用LoadBitmap(),否则我将遵循记录的建议并使用LoadImage()。要获取LoadBitmap() - 等效行为,请使用:
LoadImage(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
在新代码中,您可能实际上需要一个与设备无关的位图,在这种情况下,有使用LoadImage(),最后一个参数应为“LR_CREATEDIBSECTION”。在您拥有遗留代码的情况下,坚持使用“LR_DEFAULTCOLOR”可能更安全。