hbm 换成hbmOldBitmap
时间: 2023-08-07 13:05:52 浏览: 46
如果你将 HBITMAP 对象选入到 DC 中时创建了一个临时的位图对象,并且希望在完成操作后将原始位图对象还原回 DC 中,你可以尝试使用下面的代码:
```c++
HBITMAP hbm = ... // 某个 HBITMAP 对象
BITMAP bmp = {};
GetObject(hbm, sizeof(BITMAP), &bmp);
HDC hdc = CreateCompatibleDC(nullptr);
HBITMAP hbmOldBitmap = (HBITMAP)SelectObject(hdc, hbm);
// 在这里执行一些操作,例如绘制图形、获取像素数据等
SelectObject(hdc, hbmOldBitmap);
DeleteDC(hdc);
```
在这个代码中,我们使用 `SelectObject` 方法将 HBITMAP 对象选入到 DC 中,并保存了原始的位图对象句柄 `hbmOldBitmap`。然后我们执行一些操作,例如绘制图形、获取像素数据等。最后,我们使用 `SelectObject` 方法将原始的位图对象还原回 DC 中,并删除临时创建的兼容 DC。
请注意,如果你在选入 HBITMAP 对象之前已经存在一个位图对象,你需要保存它的句柄,并在完成操作后将它还原回去。例如:
```c++
HBITMAP hbm = ... // 某个 HBITMAP 对象
BITMAP bmp = {};
GetObject(hbm, sizeof(BITMAP), &bmp);
HDC hdc = CreateCompatibleDC(nullptr);
HBITMAP hbmOldBitmap = (HBITMAP)SelectObject(hdc, hbm);
HBITMAP hbmPrevBitmap = nullptr;
if (hbmOldBitmap) {
hbmPrevBitmap = (HBITMAP)SelectObject(hdc, hbmOldBitmap);
}
// 在这里执行一些操作,例如绘制图形、获取像素数据等
if (hbmPrevBitmap) {
SelectObject(hdc, hbmPrevBitmap);
} else {
SelectObject(hdc, GetStockObject(DEFAULT_BITMAP));
}
DeleteDC(hdc);
```
在这个代码中,我们首先保存了原始的位图对象句柄 `hbmPrevBitmap`,然后将 HBITMAP 对象选入到 DC 中,并保存了原始的位图对象句柄 `hbmOldBitmap`。然后我们执行一些操作,例如绘制图形、获取像素数据等。最后,我们使用 `SelectObject` 方法将原始的位图对象还原回 DC 中,并删除临时创建的兼容 DC。如果原始的位图对象句柄为空,我们将使用 `DEFAULT_BITMAP` 对象来还原 DC 中的位图对象。