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

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装载》很简单

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

你可能感兴趣的:(MFC)