MFC实现图像的长宽相同,绘制区域的长宽也相同,将imageList中存放的HIcon按比例绘制到更小的区域上的示例代码
时间: 2024-12-16 18:29:54 浏览: 9
在MFC(Microsoft Foundation Classes)中,可以使用CBitmap或CDC类来实现图像缩放并绘制到指定区域内。假设我们有一个`imageList`存储了一系列HIcon,并想要将它们等比例地缩小并适应于大小相同的绘图区域。这是一个简单的示例:
```cpp
// 假设已知源图像列表和绘图区域尺寸
CImageList imageList;
CRect sourceRect; // 每个HIcon原始位置和尺寸
CRect destRect; // 绘制区域
// 遍历imageList
for (int i = 0; i < imageList.GetCount(); ++i)
{
CBitmap bitmap;
HICON hIcon = imageList.GetIcon(i); // 获取当前icon
if (hIcon)
{
bitmap.LoadFromIcon(hIcon); // 加载图标到位图
// 计算缩放比例
float scaleX = (float)destRect.Width() / bitmap.GetWidth();
float scaleY = (float)destRect.Height() / bitmap.GetHeight();
CSize newSize = CSize(bitmap.GetWidth() * scaleX, bitmap.GetHeight() * scaleY);
// 创建内存DC
CDC memDC(NULL);
memDC.CreateCompatibleDC(&bitmap); // 创建兼容DC以匹配位图
// 创建临时位图以保存缩放后的图像
HBITMAP hTempBitmap = CreateCompatibleBitmap(&memDC, newSize.cx, newSize.cy);
HGDIOBJ oldBitmap = memDC.SelectObject(hTempBitmap);
// 缩放并复制位图
memDC.StretchBlt(destRect.left, destRect.top, destRect.Width(), destRect.Height(), &bitmap, 0, 0, newSize.cx, newSize.cy, SRCCOPY);
// 清理
memDC.SelectObject(oldBitmap);
DeleteObject(hTempBitmap);
bitmap.Delete();
// 释放HICON资源
DestroyIcon(hIcon);
}
}
阅读全文