美文网首页
MFC应用程序中如何动态更新Picture Control中的图

MFC应用程序中如何动态更新Picture Control中的图

作者: yumxuanyi | 来源:发表于2019-04-16 15:22 被阅读0次

    @版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出,
    本文链接https://www.jianshu.com/p/0f3f1b786155
    如有问题, 可邮件(yumxuanyi@qq.com)咨询。


    关键字: MFC 、Picture Control、CBitmap

    问题描述

    在MFC窗体中,我们经常需要根据不同的需求来动态显示Pictrue Control上的图片。并要求图片尺寸自动调整以适应控件尺寸。这里将介绍一种通用的方法。

    ShowPicture方法

    在ShowPicture方法中进行图片更新

    pictureResource为图片资源的ID
    CStatic mPictureViewer;为图片控件变量

    void CMyForm::ShowPicture(UINT pictureResource)
    {
     CBitmap bitmap;//创建CBitmap对象用于存放我们需要加载的图片
        HBITMAP hbmp;//用于记录图片加载后的句柄
        bitmap.LoadBitmap(pictureResource);//加载图片资源
        hbmp = (HBITMAP)bitmap.GetSafeHandle();//获取图片句柄
        this->mPictureViewer.SetBitmap(hbmp);//为空间设置图片
    
        //为了让图片自动缩放以适应空间的尺寸 需要获取图片尺寸信息
        BITMAP bmpInfo;//存储图片信息用于获取图片的宽度和高度
        bitmap.GetBitmap(&bmpInfo);
        int bmpWidth = bmpInfo.bmWidth;//图片宽度
        int bmpHeight = bmpInfo.bmHeight;//图片高度
    
        CRect rect;//记录Picture Control控件的尺寸
        this->mPictureViewer.GetClientRect(&rect);
        int nx = rect.left + (rect.Width() - bmpWidth) / 2;//计算图片插入位置x
        int ny = rect.top + (rect.Height() - bmpHeight) / 2;//计算图片插入位置y
    
        CDC *pDC = this->mPictureViewer.GetDC();//获取DC
        pDC->SetStretchBltMode(COLORONCOLOR);//设置图片模式
    
        CDC dcMemory;
        dcMemory.CreateCompatibleDC(pDC);
        CBitmap *pOldBitmap = dcMemory.SelectObject(&bitmap);
    
        pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMemory,0,0,bmpWidth,bmpHeight,SRCCOPY);
        ReleaseDC(pDC);//释放DC 注意获取后必须释放
     
    }
    

    实现重绘时更新图片

    void CMyForm::OnPaint()
    {
        CPaintDC dc(this);
        //myPictureResource为当前需要显示图片的id
        //或者根据实际情况在调用ShowPicture之前 获取到该ID即可
        ShowPicture(myPictureResource);
    }
    

    相关文章

      网友评论

          本文标题:MFC应用程序中如何动态更新Picture Control中的图

          本文链接:https://www.haomeiwen.com/subject/zjebwqtx.html