首页 > 技术文章 > CStatic中保持图形比例不变,尽量填充控件空间的代码

eaglexmw 2019-07-05 15:15 原文

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);
    }
}

 

推荐阅读