本人已经实现打印功能,我也已经在打印预览界面中添加了一张图片。但是多张不同的图片怎么也添加不进去。求大牛们指点。在打印预览界面函数中。已添加的一张图片代码如下。//以下为显示图片
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为打印预览界面中的图片的位置。
求大牛指点。急急急!!!
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为打印预览界面中的图片的位置。
求大牛指点。急急急!!!
StretchBlt也多执行几次,把第2,3,4,5个参数改改.
通常打印最好不要使用StretchBlt
你应该通过
dcMem.SetMapMode(MM_ANISOTROPIC);
dcMem.SetViewportExt(nSize);
dcMem.SetWindowExt(szPage);
来设置映射比例来实现拉伸居中等效果。
--------------------------
假如我从新定义所有的变量的话看下面。HDC dcMem1; dcMem1=::CreateCompatibleDC(pDC->m_hDC1); HBITMAP hOldBmp1=(HBITMAP)::SelectObject(dcMem1,hBitmap1);
这里边的m_hDC1提示CDC没有m_hDC1。所以我纠结的就是这个问题。这个办法根本行不通
这里要创建几个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);
/////////问题解决,快结贴给分吧。