如何同时显示缩放6张位图?

Isnis-fallen 2018-08-11 05:16:43
现在代码只能显示缩放一张位图, 要求显示 6 张位图排成一排, 按m_iPercent的值缩放

现在的代码, 帮忙改改吧, 谢谢

CBitmap  m_bmp;
CDC m_dc; //DC对象
CBitmap* m_pOldbmp;//旧的位图对象
int m_iPercent; //缩放位图的比例
void FreeObject(); //释放对象


if (m_bmp.m_hObject != NULL)//判断
m_bmp.DeleteObject();
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
_T("res//NodeNothing.bmp"), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
if (hbmp == NULL)
return;
//当加载第二张位图的时候要释放旧的位图对象
FreeObject();
m_bmp.Attach(hbmp);
//创建兼容DC
CDC* pDc = GetDC();
m_dc.CreateCompatibleDC(pDc);
ReleaseDC(pDc);
//把位图对象选入DC中
m_pOldbmp = m_dc.SelectObject(&m_bmp);
//使窗口无效,这样OnPaint函数就会被触发,使之被画出来
Invalidate(FALSE);


void CFormViewGraph::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CFormView::OnPaint()
//填充客户区为白色,避免缩放的时候客户区残留原来的位图
CRect rect = { 0 };
GetClientRect(&rect);
FillRect(dc, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH));
//缩放位图
m_iPercent = 100;

for (int i = 0; i < 6; i++){
BITMAP bm;
m_bmp.GetBitmap(&bm);
dc.StretchBlt(i*bm.bmWidth*m_iPercent / 100, 5, bm.bmWidth*m_iPercent / 100, bm.bmHeight*m_iPercent / 100,
&m_dc, i*bm.bmWidth*m_iPercent / 100, 5, bm.bmWidth, bm.bmHeight, SRCCOPY);
}
}


void CFormViewGraph::FreeObject()
{
if (m_pOldbmp != NULL) {
delete m_pOldbmp;
m_pOldbmp = NULL;
}
}
...全文
77 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧