本人已经实现打印功能,我也已经在打印预览界面中添加了一张图片。但是多张不同的图片怎么也添加不进去。求大牛们指点。在打印预览界面函数中。已添加的一张图片代码如下。//以下为显示图片
       HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "c:\\1.bmp", IMAGE_BITMAP,0, 0, LR_CREATEDIBSECTION |LR_DEFAULTSIZE | LR_LOADFROMFILE);
//原作者在显示图片时,用的函数为LoadBitmap(),这个函数的功能有限,而且必须将图片加载到mfc中的位图中,对于想要动态显示图片的话,很不方便,所我采用了 LoadImage()函数
       BITMAP bitmap;
       ::GetObject(hBitmap,sizeof(BITMAP),&bitmap);
       
       HDC dcMem;
       dcMem=::CreateCompatibleDC(pDC->m_hDC);
       HBITMAP hOldBmp=(HBITMAP)::SelectObject(dcMem,hBitmap);         ::StretchBlt(pDC->m_hDC,w*6.5,h*14.3,800,900,dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
   //::StretchBlt(pDC->m_hDC,nWidth/2+100,nHeight/3,nScaledWidth,nScaledHeight,dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
       
       //StretchBlt的第二个和第三个参数可以调整图片的位置,第四个和第五个参数可以调整图片的大小
       ::SelectObject(dcMem,hOldBmp);
       ::DeleteDC(dcMem);
       ::DeleteObject(hBitmap);
代码中w*6.5,h*14.3为打印预览界面中的图片的位置。
求大牛指点。急急急!!!

解决方案 »

  1.   

    你的注释很清楚了,循环执行不就好了?
    StretchBlt也多执行几次,把第2,3,4,5个参数改改.
      

  2.   

    你把几张图片都画在内存DC上面,然后再调用StretchBlt或BitBlt送到目标DC上即可。
      

  3.   

    w*6.5,h*14.3
    通常打印最好不要使用StretchBlt
    你应该通过
    dcMem.SetMapMode(MM_ANISOTROPIC);
    dcMem.SetViewportExt(nSize);
    dcMem.SetWindowExt(szPage);
    来设置映射比例来实现拉伸居中等效果。
    --------------------------
      

  4.   

    大牛你的做法不行。我都尝试过了。打印的全是第一张照片。不是多张。
    假如我从新定义所有的变量的话看下面。HDC dcMem1;        dcMem1=::CreateCompatibleDC(pDC->m_hDC1);        HBITMAP hOldBmp1=(HBITMAP)::SelectObject(dcMem1,hBitmap1);      
    这里边的m_hDC1提示CDC没有m_hDC1。所以我纠结的就是这个问题。这个办法根本行不通
      

  5.   


    这里要创建几个dc才行的!/////----------在OnInitialUpdate中创建DC--------//////
    //创建内存兼容DC
    m_dcComplex.CreateCompatibleDC(pDC);
    m_bmpComplex.CreateCompatibleBitmap(pDC, SC_WIDTH, SC_HEIGHT);
    m_dcComplex.SelectObject(&m_bmpComplex);
    m_dcComplex.FillSolidRect(CRect(0, 0, SC_WIDTH, SC_HEIGHT), RGB(255,255,255));
    //创建画布DC
    m_dcPic.CreateCompatibleDC(pDC);
    /////////////////
    ////////////////比如要吧一个图画多次///
      HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "D:\\temp\\all image1\\15bitHicoloX1R5G5B5_1.bmp", IMAGE_BITMAP,0, 0, LR_CREATEDIBSECTION |LR_DEFAULTSIZE | LR_LOADFROMFILE);        
      BITMAP m_bmpPic;        
    ::GetObject(hBitmap,sizeof(BITMAP),&m_bmpPic);
    m_dcPic.SelectObject(hBitmap);
    m_dcComplex.FillSolidRect(CRect(0, 0, SC_WIDTH, SC_HEIGHT), RGB(255,255,255));
    int i,j;
    for(i=0; i<3; i++)
    {
    for(j=0; j<3; j++)
    {
    m_dcComplex.BitBlt(j*m_bmpPic.bmWidth, i*m_bmpPic.bmHeight, 
    m_bmpPic.bmWidth ,m_bmpPic.bmHeight, 
    &m_dcPic, 0, 0, SRCCOPY);
    }
    }

    Invalidate();
    ////////////////////
    //如果要打印则在OnPrint函数中将兼容DC传递到目标设备DC
    pDC->BitBlt(0, 0, SC_WIDTH, SC_HEIGHT, &m_dcComplex, 0, 0, SRCCOPY);
    /////////问题解决,快结贴给分吧。