RT,谢谢!!

解决方案 »

  1.   

    通过虚线框截取里面的图形,在放大StretchBlt,显示出来就可以了.
      

  2.   

    查一下CRectTracker的用法就知道了~~
      

  3.   

    记下虚线框的位置和大小,把这块图像StretchBlt到整个客户区。
    如果要保持纵横比例,比较cxClient/rect.Width()和cyClient/rect.Height(),按较小的那个算放大比例和重新修改Rect区域,再StretchBlt
      

  4.   

    记下虚线框的位置和大小,把这块图像StretchBlt到整个客户区。 
    如果要保持纵横比例,比较cxClient/rect.Width()和cyClient/rect.Height(),按较小的那个算放大比例和重新修改Rect区域,再StretchBlt此方法 如果放大倍数不是很大的话 可行
      

  5.   

    CDC   *pDC=GetDC(); 
    CDC   dcImage; 
    CBitmap   bmp;
    CRectTracker   temp; 
    temp.TrackRubberBand(this,point,TRUE); 
    temp.m_rect.NormalizeRect(); 
    temp.GetTrueRect(temp.m_rect); 
    pDC->DrawFocusRect(temp.m_rect);     HDC hDC = CreateDC(L"DISPLAY", NULL, NULL, NULL);
     CRect rect;
     GetClientRect(&rect);  HDC hBufDC;
          HBITMAP hBitmap, hBitTemp;
          //创建设备上下文(HDC)
          hBufDC = CreateCompatibleDC(hDC);
          //创建HBITMAP
      hBitmap = CreateCompatibleBitmap(hDC,  temp.m_rect.Width(),temp.m_rect.Height());
          hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
          //得到位图缓冲区
     StretchBlt(hBufDC, 0, 0, temp.m_rect.Width(),temp.m_rect.Height(),hDC, 0, 0,  rect.Width(), rect.Height(), SRCCOPY);
          //得到最终的位图信息
          hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
      if(!hBitmap)
      {
      return;
      }
          //释放内存
          DeleteObject(hBitTemp); 
        BITMAP   bm;     if(bmp.Attach(hBitmap)==0)
    {
    return;
    }
        bmp.GetBitmap(&bm);    
        GetClientRect(&rect); 
        CPaintDC   dc(this); 
       
        CBitmap*   pBitmap   =   new   CBitmap; 
        pBitmap=&bmp; 
        if(!dcImage.CreateCompatibleDC(&dc)) 
        { 
            return; 
        } 
        CBitmap*   pOldBitmap   =   dcImage.SelectObject(pBitmap); 
        dc.BitBlt(0,   0,rect.Width(),   rect.Height(),&dcImage,   0,   0,   SRCCOPY); 
        dcImage.SelectObject(pOldBitmap);     
         CView::OnLButtonDown(nFlags, point);这是在OnLButtonDown里面的代码,各位帮我看看,划出虚线框后没反映。。谢谢
      

  6.   

    划出虚线框后没反映
    ---------------------
    在OnLButtonUp里做放大处理。
      

  7.   

    void COutputBar::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: Add your message handler code here and/or call default
    CRect   rect; 
        GetClientRect(&rect); POINT p;
    GetCursorPos(&p); CDC *pDC=GetDC(); 
    CRectTracker temp;

        temp.TrackRubberBand(this,point,TRUE);
    temp.m_rect.NormalizeRect();
    temp.GetTrueRect(temp.m_rect); HDC hDC = CreateDC(L"DISPLAY", NULL, NULL, NULL);
    //HBITMAP bmp;
    //bmp=GetSrcBit(hDC,temp.m_rect.Width(),temp.m_rect.Height());
    HDC hBufDC;
        HBITMAP hBitmap, hBitTemp;
          //创建设备上下文(HDC)
        hBufDC = CreateCompatibleDC(hDC);
          //创建HBITMAP
    hBitmap = CreateCompatibleBitmap(hDC, rect.Width(),rect.Height());
        hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
          //得到位图缓冲区
    StretchBlt(hBufDC,0,0,rect.Width(), rect.Height(),hDC,p.x,p.y,  temp.m_rect.Width(),temp.m_rect.Height(), SRCCOPY);
          //得到最终的位图信息
        hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
          //释放内存
        DeleteObject(hBitTemp); CDC   dcMem; 
    CBitmap  Bmp;
    Bmp.Attach(hBitmap);
    dcMem.CreateCompatibleDC(NULL);
        dcMem.SelectObject(&Bmp);

    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//该函数给对话框贴上位图    

    //Bmp.Detach();
    dcMem.DeleteDC();
    CBCGPDockingControlBar::OnLButtonDown(nFlags, point);
    }
    这样,就可以用虚线框放大了