我想做一个对话框界面,将该对话框分成四个部分,每个部分上各有一个实现自对话框上的图形可以伸缩的按钮!
问题是:
如何实现通过单击按钮,实现图像的放大至整个界面?
然后再单击按钮,放大的图像又缩小至原来的尺寸?请求各位大侠的帮忙,不胜感激,!
本人基础很差,希望各位大侠能把源代码附上!
不胜感激!

解决方案 »

  1.   

    if(m_pImgBmi&&m_pImgDib)
    {
    if(pMemDC==NULL)//bFirst)
    {
    //bFirst=FALSE;
    pMemDC=new CDC;
    pMemDC->CreateCompatibleDC(pDC);
    }
    CRect rc;
    GetClientRect(&rc);
    if(pOldBmp!=NULL)
    pMemDC->SelectObject(pOldBmp);
    if(hBmp!=NULL)DeleteObject(hBmp);
    hBmp=CreateDIBitmap(pDC->GetSafeHdc(),
    (BITMAPINFOHEADER*)m_pImgBmi,CBM_INIT,
    m_pImgDib,m_pImgBmi,DIB_RGB_COLORS);
    if(hBmp==NULL)return;
    CBitmap* pBmp=CBitmap::FromHandle(hBmp);
    pOldBmp=pMemDC->SelectObject(pBmp);
    pBmp->GetBitmap(&bm);
    if(hBmp==NULL) return;
    float wid,hei;
    wid=(float)(rc.right-rc.left);//bm.bmWidth;//*2;
    hei=(float)(rc.bottom-rc.top);//bm.bmHeight;//*2;
    int x,y;
    float hrate,wrate,rate;//保持原始图像的比例
    hrate=(float)hei/(float)bm.bmHeight;
    wrate=(float)wid/(float)bm.bmWidth;
    if(hrate<1.0&&wrate<1.0)
    {
    rate=(hrate<wrate)?hrate:wrate;
    }
    else if(hrate>1.0&&wrate>1.0)
    {
    rate=(hrate<wrate)?hrate:wrate;
    }
    else if(hrate>1.0&&wrate<1.0)
    {
    rate=wrate;
    }
    else 
    {
    rate=hrate;
    }
    x=(int)abs((wid-bm.bmWidth*rate)/2);
    y=(int)abs((hei-bm.bmHeight*rate)/2);
    pDC->SetStretchBltMode(HALFTONE);
    pDC->StretchBlt(x,y,wid-2*x,hei-2*y,pMemDC,
    0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);


    }