将位图hBmp选入内存DC:
hBmpDef = (HBITMAP)SelectObject(pMemDC->m_hDC, hBmp);
if (hBmp != NULL && hBmpDef == NULL)
ShowLastError(0);
SelectObject返回NULL,表明失败。ShowLastError(0)里调用显示GetLastError的内容,提示“成功操作完成”。
本来就是返回NULL啊
这个函数是返回该类型上一次Select的对象,例如
HBITMAP a,b,c;
...
SelectObject(hdc, a); //返回NULL
SelectObject(hdc, b); //返回a
SelectObject(hdc, c); //返回b
该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 “采纳” 感谢支持!
如果 ShowLastError(0) 实际上是显示“成功操作完成”的消息,那么它不应该在这里调用,因为如果 hBmpDef 不是 NULL,它将不会被调用。如果它是一个调试用的函数,那么应该在成功的情况下也调用它,以便于跟踪程序运行情况。
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
HBITMAP hBmp = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HDC pMemDC = CreateCompatibleDC(NULL);
HBITMAP hBmpDef = (HBITMAP)SelectObject(pMemDC, hBmp);
if (hBmp != NULL && hBmpDef == NULL)
{
DWORD errorCode = GetLastError();
cout << "Failed to select object. Error code: " << errorCode << endl;
}
else
{
cout << "Successfully selected object." << endl;
}
return 0;
}