[MFC] PictureEx类使用和图片居中

最近项目中要显示gif动态图片,偶然中发现一个不错的类PictureEx,显示gif非常的溜。

不过也发现它不支持图片居中、图片按原比例显示能操作,因此做了一些小的修改来支持。

由于网上介绍PictureEx类的文章太多了,这里不再赘述,只介绍图片居中显示和图片铺满控件的修改。


图片居中并按原比例显示

void CPictureEx::SetCenter()
{
    CRect rc;
    this->GetClientRect(&rc);   
    double wscale = (double)rc.Width() / m_PictureSize.cx;
    double hscale = (double)rc.Height() / m_PictureSize.cy;
    int x, y, w, h;    
    if (wscale >= hscale)
    {
        h = rc.Height();
        w = (double)m_PictureSize.cx / m_PictureSize.cy * h;
        x = (rc.Width() - w) / 2 + rc.left;
        y = rc.top;
    }
    else
    {
        w = rc.Width();
        h = (double)m_PictureSize.cy / m_PictureSize.cx * w;
        x = rc.left;
        y = (rc.Height() - h) / 2 + rc.top;
    }
    CRect centerRc(x, y, x+w, y+h);
    SetPaintRect(¢erRc);    
    m_brBackGround = CreateSolidBrush(RGB(99, 99, 99));
    
} 

图片铺满控件

void CPictureEx::SetFill()
{
    CRect rc;
    this->GetClientRect(&rc);   
    SetPaintRect(&rc);

    m_brBackGround = CreateSolidBrush(RGB(99, 99, 99));
} 

OnPaint函数修改

void CPictureEx::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	LONG nPaintWidth = m_PaintRect.right-m_PaintRect.left;
    if (nPaintWidth > 0)
    {
        LONG nPaintHeight = m_PaintRect.bottom - m_PaintRect.top;

        if (m_brBackGround)
        {
            RECT rect;
            this->GetClientRect(&rect);            
            FillRect(dc.m_hDC, &rect, m_brBackGround);
        };

        ::StretchBlt(dc.m_hDC, m_PaintRect.left, m_PaintRect.top, nPaintWidth, nPaintHeight,
            m_hMemDC, 0,0, m_PictureSize.cx, m_PictureSize.cy, SRCCOPY);
    }
    else
    {
        ::BitBlt(dc.m_hDC, 0, 0, m_PictureSize.cx, m_PictureSize.cy,
            m_hMemDC, 0, 0, SRCCOPY);
    };
} 

PrepareDC函数会修改控件大小,去除下面语句才能全图片居中和图片铺满控件得以实现:

BOOL CPictureEx::PrepareDC(int nWidth, int nHeight)
{    //SetWindowPos(NULL,0,0,nWidth,nHeight,SWP_NOMOVE | SWP_NOZORDER);
    //...下面代码不变
}

以上就是做的一些修改,demo效果如下:


下面是六种效果的截图:



最后,在使用中还发现PictureEx居然不支持png,不知道是不是我用的不对,有时间研究下,这么好的类不支持png就太遗憾了;文中如有不对之处望亲爱的读者不吝赐教,大家一起成长奋斗


PictureEx下载地址:

https://www.codeproject.com/Articles/1427/Add-GIF-animation-to-your-MFC-and-ATL-projects-wit

demo地址:

https://download.csdn.net/download/xxm524/10495277



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一马途追

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值