请各位大侠帮忙:
我在view里画了一个图标,打印预览均正常,但打印就是不出图标来。
打印文字,矩形均正常,请各位大侠指点!高分
OnDraw()
{
     pDC->TextOut(100,20,"Print Test");
     pDC->DrawIcon(0,0,m_LabIcon);}

解决方案 »

  1.   

    ,一会我帮你解决,现在busying……
      

  2.   

    图标是不可以通过DrawIcon打印的,而是使用StretchBlt函数
      

  3.   

    你应该创建一个设备兼容dc,然后创建一个位图,替换掉设备兼容dc的位图,然后在设备兼容dc上进行DrawIcon,然后通过StretchBlt函数把位图拉伸到打印机dc中,基本是这样吧
      

  4.   

    DrawIcon画的是icon啊,怎么是位图呢?
      

  5.   

    /*
    //打印或者在屏幕上画图标
    //pDC 打印机或者屏幕dc指针
    iLogPixelX
    iLogPixelY
    屏幕DC的GetDeviceCaps(LOGPIXELSX)值,其中
    iLogPixelX=DC.GetDeviceCaps(LOGPIXELSX);
    iLogPixelY=DC.GetDeviceCaps(LOGPIXELSY);*/
    void DrawICON(CDC* pDC,int iLogPixelX,int iLogPixelY)
    {
    // int iMapMode=pDC->GetMapMode();
    // pDC->SetMapMode(MM_LOENGLISH);
    CDC MemDC; // 内存设备环境指针,在视的整个存在过程都将存在
    CBitmap Bitmap,*pOldBmp;  
    CRect Source, Dest; // 记录源位图尺寸和最终显示尺寸
    BITMAP bm;
    if(MemDC.GetSafeHdc() == NULL)
    {
    HICON hIcon1;   // icon handle 
    hIcon1 = LoadIcon(NULL, IDI_QUESTION); 
    ICONINFO info;
    GetIconInfo(hIcon1,&info);
    MemDC.CreateCompatibleDC(pDC);
    Bitmap.CreateCompatibleBitmap(&MemDC,info.xHotspot*2,info.yHotspot*2);
    pOldBmp=MemDC.SelectObject(&Bitmap);

    DrawIcon(MemDC.GetSafeHdc(),0,0,hIcon1);
    Bitmap.GetObject(sizeof(bm),&bm);
    Source.top=0;
    Source.left=0;
    Source.right= bm.bmWidth;
    Source.bottom = bm.bmHeight;
    Dest = Source;
    }
    pDC->DPtoLP(&Dest);
    if(pDC->IsPrinting())
    {
    Dest.left=(int)(Dest.left*((double)pDC->GetDeviceCaps(LOGPIXELSX))/iLogPixelX);
    Dest.right=(int)(Dest.right*((double)pDC->GetDeviceCaps(LOGPIXELSX))/iLogPixelX);
    Dest.top=(int)(Dest.top*((double)pDC->GetDeviceCaps(LOGPIXELSY))/iLogPixelY);
    Dest.bottom=(int)(Dest.bottom*((double)pDC->GetDeviceCaps(LOGPIXELSY))/iLogPixelY);
    }
    pDC->StretchBlt(Dest.left, Dest.top, Dest.right, Dest.bottom,
    &MemDC, Source.left, Source.top, Source.right,Source.bottom, SRCCOPY);
    MemDC.SelectObject(pOldBmp);
    Bitmap.DeleteObject();
    MemDC.DeleteDC();
    // pDC->SetMapMode(iMapMode);
    return;
    }