繁体   English   中英

LoadBitMap()API是否会创建绘画问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM