MFC 对话框载入背景图片-控件加载图片

文章介绍了三种在MFC中将图片加载到Picture控件的方法:原始的MFC方法适用于BMP格式,CImage类用于加载jpg格式,以及使用GDIPlus支持更多格式并加载外部图片或资源ID。每种方法都详细阐述了代码实现,但均未处理图片缩放以适应控件大小的问题。
摘要由CSDN通过智能技术生成

Picture控件(其他控件也可以)加载BMP格式图片

方法一:此方法是MFC的原始方法,只能加载BMP格式图片

CRect pictureRect;
m_ctrlPic.GetClientRect(&pictureRect);
CDC* pDC = m_ctrlPic.GetDC();  //m_ctrlPic是Picture控件的变量  

CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP);   //IDB_BITMAP是要加载的位图的ID  
BITMAP StatBmp;
bmp.GetBitmap(&StatBmp);
CDC memdc;
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&bmp);
CDC ppDC;
ppDC.CreateCompatibleDC(pDC);
CBitmap bmpBuf;                    //bmpbuf是要放入控件中的位图  
bmpBuf.CreateCompatibleBitmap(pDC, pictureRect.right, pictureRect.bottom);
        ppDC.SelectObject(&bmpBuf);

ppDC.StretchBlt(pictureRect.left, pictureRect.top, pictureRect.Width(), pictureRect.Height(), &memdc, 0, 0, StatBmp.bmWidth, StatBmp.bmHeight, SRCCOPY);  //将IDB_BITMAP_PROTOCOL_3复制到bmpbuf位图中,并按指定的大小转换  

m_ctrlPic.SetBitmap((HBITMAP)bmpBuf.Detach());
m_ctrlPic.ReleaseDC(pDC);
memdc.DeleteDC();
ppDC.DeleteDC();

m_ctrlPic:是Picture控件的对象
IDB_BITMAP:是你自己添加的BMP图片资源ID

方法二:此方法是使用MFC的CImage类来加载jpg格式的图片

void ShowImage(CString strImgFilePath)
{
    int cx, cy;
    CImage  image;
    CRect   rect;   
    if(!PathFileExists(strImgFilePath))  //判断此路径是否存在 
        return ;

    //根据路径载入图片
    image.Load(strImgFilePath);
    //获取图片的宽 高度
    cx  = image.GetWidth();
    cy  = image.GetHeight();

    //获取Picture Control控件的大小
    GetDlgItem(IDC_STATIC_Thumbnails)->GetWindowRect(&rect);
    //将客户区选中到控件表示的矩形区域内
    ScreenToClient(&rect);
    //窗口移动到控件表示的区域,使控件的大小等于图片的大小
    GetDlgItem(IDC_STATIC_Thumbnails)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);
    CWnd *pWnd = NULL;///使用这种方法获取控件句柄,可以动态获取不同控件的句柄,尤其在批量控件设置时很方便
    pWnd    = GetDlgItem(IDC_STATIC_Thumbnails);//获取控件句柄
    pWnd->GetClientRect(&rect);//获取句柄指向控件区域的大小
    CDC *pDC = NULL;
    pDC = pWnd->GetDC();//获取picture的DC

    image.Draw(pDC->m_hDC, rect);//将图片绘制到picture表示的区域内

    ReleaseDC(pDC);
}

方法三:使用GDIPlus加载图片,这种方法简单而且支持的图片格式多,此方法是加载外部图片,还可以加载资源ID

CDC* pDC = m_ctrlPic.GetDC();  //m_ctrlPic是Picture控件的变量
        Gdiplus::Graphics graphics(pDC->GetSafeHdc());
        Gdiplus::Image image(m_StrImgFilePath );//若路径不对,则无法实现在客户区里绘图
        graphics.DrawImage(&image, 0, 0);

m_StrImgFilePath:指的是外部图片路径
GDIPlus加载资源ID
关于GDIPlus装载,可以看我博客《GDIPlus装载》很简单

以上这些方法都有一个弊端,不能对图片进行缩放去适应控件的大小

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值