[英]Does LoadBitMap() API creates paint issues?
我有一个用C++
, MFC
编写的遗留系统。 我正在检查一块代码,其中LoadBitmap()
被LoadImage()
API替换。 代码中写的注释说“ LoadBitmap()
使用来自内核内存的分页池,如果使用率达到最大限度,那么就会弹出绘制问题。所以应该使用LoadImage
API”。
我在谷歌上搜索了一下,但没有得到太多信息。 当我检查MSDN时 ,他们说“ 请注意,不推荐使用LoadBitmap加载OEM位图,仅支持向后兼容性 ”
我的问题是: LoadBitmap()
API是否有任何问题? 我们为什么要在LoadBitmap()
选择LoadImage()
LoadBitmap()
? 2.什么是OEM bitmaps
? 如果我用LoadBitmap
加载普通的BMP有什么问题吗?
LoadBitmap()仅创建与显示兼容的位图,而不是与设备无关的位图(DIB)。 并且,正如LoadBitmap()文档本身所说的那样,“此函数已被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”可能更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.