优化这段代码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 11:55:52 浏览: 125
可以考虑使用资源文件的方式来加载位图,以减少代码量和提高代码可读性。具体操作如下:
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);
```
这样可以避免硬编码位图路径,使代码更加清晰易懂。同时,如果需要修改位图资源,只需要在资源文件中修改即可,无需修改代码。
相关问题
HWND hwnd = FindWindow(NULL, "窗口标题"); HDC hdcWindow = GetDC(hwnd); HDC hdcMemDC = CreateCompatibleDC(hdcWindow); RECT rect; GetClientRect(hwnd, &rect); int width = rect.right - rect.left; int height = rect.bottom - rect.top; HBITMAP hbmScreen = CreateCompatibleBitmap(hdcWindow, width, height); HBITMAP hbmOldBitmap = (HBITMAP)SelectObject(hdcMemDC, hbmScreen); PrintWindow(hwnd, hdcMemDC, PW_CLIENTONLY); BITMAP bmpScreen; GetObject(hbmScreen, sizeof(BITMAP), &bmpScreen); BITMAPINFOHEADER bi; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = bmpScreen.bmWidth; bi.biHeight = bmpScreen.bmHeight; bi.biPlanes = 1; bi.biBitCount = 32; bi.biCompression = BI_RGB; bi.biSizeImage = 0; bi.biXPelsPerMeter = 0; bi.biYPelsPerMeter = 0; bi.biClrUsed = 0; bi.biClrImportant = 0; BYTE *pBits = new BYTE[bmpScreen.bmWidth * bmpScreen.bmHeight * 4]; GetDIBits(hdcMemDC, hbmScreen, 0, bmpScreen.bmHeight, pBits, (BITMAPINFO*)&bi, DIB_RGB_COLORS); QImage image(pBits, bmpScreen.bmWidth, bmpScreen.bmHeight, QImage::Format_ARGB32); QPixmap pixmap = QPixmap::fromImage(image); pixmap.save("screenshot.png"); SelectObject(hdcMemDC, hbmOldBitmap); DeleteObject(hbmScreen); DeleteDC(hdcMemDC); ReleaseDC(hwnd, hdcWindow);
这段代码是用于截取指定窗口的屏幕截图,并保存为一张 PNG 格式的图片。首先通过 FindWindow 函数找到指定窗口的句柄,然后获取窗口的设备上下文(HDC),创建一个与窗口设备上下文兼容的内存设备上下文(HDC),再创建一个与窗口设备上下文兼容的位图(HBITMAP),并将其选入内存设备上下文中。接着使用 PrintWindow 函数将窗口的内容绘制到内存设备上下文中的位图上,然后通过 GetDIBits 函数将位图数据读取到一个字节数组中。最后将字节数组转换为 QImage 对象,再将其转换为 QPixmap 对象,并将其保存为 PNG 格式的图片。
LoadBitmapA(IDB_PNG1)
这是一个Windows API函数的调用,用于加载一个位图资源。其中,IDB_PNG1是一个预定义的标识符,表示要加载的位图资源的ID。LoadBitmapA函数会返回一个HBITMAP类型的句柄,可以用它来操作这个位图。需要注意的是,这个函数只能加载BMP格式的位图,如果要加载其他格式的位图,需要使用其他的函数。
阅读全文