是那种所见即所得,屏幕显示的是什么,就能按照屏幕比例大小进行打印,多谢了!

解决方案 »

  1.   

    这样试试:用GetDC获取屏幕DC,用CreateDC创建打印DC,然后StartDoc、StretchBlt、EndDoc,再DeleteDC、ReleaseDC。
      

  2.   

    www.vckbase.com/document/viewdoc/?id=1077
      

  3.   

    楼主所说的问题 其实就一个函数的内容 SelectClipRgn();所见即所得的打印 我的代码是这样的: void C***View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {    
        CScrollView::OnPrepareDC(pDC, pInfo);
        pDC->SetMapMode(MM_ANISOTROPIC);                     //转换坐标映射方式、确定窗口大小  
        CSize size = CSize(6000, 5000);   
        pDC->SetWindowExt(size); 
        
        int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX); //得到实际设备每逻辑英寸的象素数量     
        int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);   
        
        
        long xExt = (long)size.cx * xLogPixPerInch/96;        //得到设备坐标和逻辑坐标的比例  
        long yExt = (long)size.cy * yLogPixPerInch/96;   
        pDC->SetViewportExt((int)xExt, (int)yExt);
    }设定上面这个代码以后 只要在OnDraw里面绘制的东西 就是打印的东西了。 
    你在OnDraw里面去实现放大 缩小 打印的时候就是放大缩小的了。 为了控制打印的时候打印出纸张限定的边界 在OnDraw当中:void C**View::OnDraw( CDC* pDC ) 
    {
    ScreenDraw( pDC );  //不打印的时候屏幕绘图
    if( pDC->IsPrinting() ) //如果是打印
    {
    CRgn rgn;
    rgn.CreateRectRgn( 0,0,400,400);  pDC->SelectClipRgn( &rgn );//设定打印区域 如果是曲线也不必考虑曲线是否超过了范围 会自动在限定区域边缘截断 ScreenDraw( pDC ); //设定打印区域后再调用屏幕绘图函数,则只有在打印区域当中的绘图被打印出来
    }
    }
      

  4.   

    我写了下面的代码,没有打印啊,也没有弹出打印对话框之类的。不懂,再次请教
    ScreenDraw0(dc,&rect);  //不打印的时候屏幕绘图
        if( dc->IsPrinting() ) //如果是打印
        {
            CRgn rgn;
            rgn.CreateRectRgn( 0,0,400,400);         dc->SelectClipRgn( &rgn );//设定打印区域 如果是曲线也不必考虑曲线是否超过了范围 会自动在限定区域边缘截断        ScreenDraw0(dc,&rect); //设定打印区域后再调用屏幕绘图函数,则只有在打印区域当中的绘图被打印出来
        }