Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LoadBitMap()API是否会产生绘制问题?_C++_Windows_Winapi - Fatal编程技术网

C++ LoadBitMap()API是否会产生绘制问题?

C++ LoadBitMap()API是否会产生绘制问题?,c++,windows,winapi,C++,Windows,Winapi,我有一个用C++,MFC编写的遗留系统。 我正在检查一段被API替换的代码。代码中的注释是“LoadBitmap()使用内核内存中的分页池,如果使用量达到最大限制,则会弹出绘制问题。因此应使用LoadImageAPI” 我在谷歌上搜索了一下,但没有得到多少信息。当我检查时,他们说“注意,使用LoadBitmap加载OEM位图是不推荐的,并且仅支持向后兼容” 我的问题是: 1.LoadBitmap()API是否存在任何问题?为什么我们更喜欢LoadImage()而不是LoadBitmap()? 2

我有一个用
C++
MFC
编写的遗留系统。 我正在检查一段被API替换的代码。代码中的注释是“
LoadBitmap()
使用内核内存中的分页池,如果使用量达到最大限制,则会弹出绘制问题。因此应使用
LoadImage
API”

我在谷歌上搜索了一下,但没有得到多少信息。当我检查时,他们说“注意,使用LoadBitmap加载OEM位图是不推荐的,并且仅支持向后兼容”

我的问题是: 1.
LoadBitmap()
API是否存在任何问题?为什么我们更喜欢
LoadImage()
而不是
LoadBitmap()
? 2.什么是OEM位图?如果使用
LoadBitmap
加载普通BMP,是否会出现任何问题?

LoadBitmap()将仅创建与显示兼容的位图,而不是与设备无关的位图(DIB)。正如在顶部所说的那样,“这个函数已经被函数所取代”。LoadBitmap()仍然存在几乎令人惊讶,因为我认为自Windows 95以来它已经被LoadImage()取代了!(这只是为了说明放弃向后兼容性有多难!)

OEM位图是系统范围内的预定义图像,可以通过传递NULL hInstance参数和magic lpBitmapName(如OBM_btncorner、OBM_复选框等)来请求。这些过去被Windows用来绘制UI的各个部分,但现在由Windows来处理。同样,OEM位图是一个古老的东西,“新”行为已经存在很长时间了

除非您有充分的理由想使用LoadBitmap(),否则我会按照文档中的建议使用LoadImage()。要获取LoadBitmap()-等效行为,请使用:

LoadImage(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
在新代码中,您可能实际上需要一个独立于设备的位图,在这种情况下,需要使用LoadImage(),最后一个参数应该是“LR_CREATEDIBSECTION”。在使用遗留代码的情况下,坚持使用“LR_DEFAULTCOLOR”可能更安全