CStatic中保持图形比例不变,尽量填充控件空间的代码

CStatic中保持图形比例不变,尽量填充控件空间的代码

先获取控件的高、宽,然后获取图像的高、宽,测试需要调整高还是调整宽

void CImagePreviewStatic::DrawItem(LPDRAWITEMSTRUCT    /*lpDrawItemStruct*/)
{
    Unit  units;
    CRect rect;

    if (m_img2 != NULL) {
        //获取到HDC
        HWND hWnd = GetParent()->m_hWnd;
        HDC hDc = ::GetDC(hWnd);
        //获取画的位置
        GetWindowRect(&rect);
        ::ScreenToClient(hWnd, (LPPOINT)&rect);
        ::ScreenToClient(hWnd, (LPPOINT)(&rect) + 1);
        ::SetStretchBltMode(hDc, COLORONCOLOR);

        int rectWidth = rect.right - rect.left;
        int rectHeight= rect.bottom - rect.top;

        //在这儿计算显示区域
        int nHeight = m_img2->GetHeight();
        int nWidth  = m_img2->GetWidth();

        //假设图像高度不变,则在当前RECT下,需要多少的宽度
        int nAdjWidth = (rectHeight*nWidth)/nHeight;
        //如果当前宽度大于现有宽度,则宽度不变,调整高度信息
        if (nAdjWidth > rectWidth) {
            int nAdjHeight = (rectWidth*nHeight)/nWidth;
            rect.bottom = rect.top + nAdjHeight;
        } else {
            //只需要调整不等于的情况
            if (nAdjWidth != rectWidth){
                rect.right = rect.left + nAdjWidth;
            }
        }

        //画图片
        m_img2->Draw(hDc,rect);
    }
}

 

转载于:https://www.cnblogs.com/eaglexmw/p/11138478.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值