优化这段代码HBITMAP hBmp1 = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); HBITMAP hBmp2 = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2)); m_pic1.SetBitmap(hBmp1); m_pic2.SetBitmap(hBmp2);
时间: 2024-02-25 16:55:52 浏览: 16
可以考虑使用资源文件的方式来加载位图,以减少代码量和提高代码可读性。具体操作如下:
1. 在资源文件中添加位图资源,例如将 IDB_BITMAP1 和 IDB_BITMAP2 添加到资源文件中。
2. 在代码中使用以下方式加载位图:
```c++
// 加载资源
HINSTANCE hInst = AfxGetInstanceHandle();
HBITMAP hBmp1 = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));
HBITMAP hBmp2 = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2));
// 设置位图
m_pic1.SetBitmap(hBmp1);
m_pic2.SetBitmap(hBmp2);
```
这样可以避免硬编码位图路径,使代码更加清晰易懂。同时,如果需要修改位图资源,只需要在资源文件中修改即可,无需修改代码。
相关问题
MFC中 m_hBitmap!=如何解决
如果在 MFC 中使用 CBitmap 时遇到 m_hBitmap!=0 的问题,可以先使用 DeleteObject() 函数释放原有的位图句柄,再加载或创建新的位图句柄。具体操作如下:
```cpp
if (m_hBitmap != NULL) {
::DeleteObject(m_hBitmap);
m_hBitmap = NULL;
}
m_hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAP1),
IMAGE_BITMAP,
0, 0,
LR_DEFAULTSIZE | LR_LOADTRANSPARENT);
if (m_hBitmap == NULL) {
// 加载位图失败的处理代码
}
```
这段代码首先检查 m_hBitmap 是否已经被创建,如果是则先调用 DeleteObject() 函数释放位图句柄,然后再重新加载位图。需要注意的是,LoadImage() 函数返回的是 HBITMAP 类型的位图句柄,需要使用 (HBITMAP) 强制转换一下才能赋值给 m_hBitmap。如果加载位图失败,可以在后面添加相应的处理代码,比如弹出提示框提示用户。
LoadBitmapA(IDB_PNG1)
这是一个Windows API函数的调用,用于加载一个位图资源。其中,IDB_PNG1是一个预定义的标识符,表示要加载的位图资源的ID。LoadBitmapA函数会返回一个HBITMAP类型的句柄,可以用它来操作这个位图。需要注意的是,这个函数只能加载BMP格式的位图,如果要加载其他格式的位图,需要使用其他的函数。