hur.cn - 华软网

 热门搜索

打印后 按取消 再次打印会出错

  作者:未知    来源:网络    更新时间:2011/5/21
CDC *pDC;//屏幕DC
    pDC = CDC::FromHandle(::GetDC(m_hWnd));//获取当前整个屏幕DC
    int BitPERPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式
    int Width = pDC->GetDeviceCaps(HORZRES);
    int Height = pDC->GetDeviceCaps(VERTRES);

    
    m_memDC.CreateCompatibleDC(pDC);
    
    CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap
    memBitmap.CreateCompatibleBitmap(pDC, Width, Height);

    oldmemBitmap = m_memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC
    m_memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//复制屏幕图像到内存DC



CDC printDC;
CRect rect;
CPrintDialog printDlg(FALSE);
DOCINFO docInfo;

if(printDlg.DoModal()==IDOK)
{
HDC hDC;
hDC=printDlg.GetPrinterDC();
if(!printDC.Attach(hDC))
return;
}
else
{
printDC.Detach();
return;
}

memset(&docInfo,0,sizeof(docInfo));
docInfo.cbSize=sizeof(DOCINFO);
docInfo.lpszDocName="Print Window";
if(printDC.StartDoc(&docInfo)<=0)
{
#ifdef _DEBUG
AfxMessageBox("Start Doc Failed");
#endif
printDC.Detach();
return;
}
printDC.StartPage();
printDC.SetMapMode(MM_TEXT);

GetClientRect(&rect);

    printDC.StretchBlt(0,0,rect.Width()*6.1,rect.Height()*5,&m_memDC,0,0,rect.Width(),rect.Height(),SRCCOPY);

printDC.EndPage();
printDC.EndDoc();

printDC.Detach();
---华软 网友回答---
你看错误的地方在哪里,是不是资源的释放为题
---华软网友回复---
应该是资源没有释放
---华软网友回复---
那应该怎么改?我不是计算机专业的,对VC不上很熟,后天就毕业答辩了 帮帮忙啊 工艺数据库就差这块就完成了
---华软网友回复---
设备上下文CDC和位图对象用完之后要释放掉
---华软网友回复---
你自己再看看在那些地方用完设备上下文以及位图对象,然后加上
C++">
printDC.DeleteDC();
memBitmap.DeleteObject();

---华软网友回复---
非计算机专业的做到这地步已经和牛X了,祝你答辩顺利(我14号已经答辩过啦,呵呵)
---华软网友回复---
我机械的 我们导师去日本拍AV(不知道是不是拍片片去O(∩_∩)O~) 不舍得回来,学校临时叫了个计算机的老师过来让我们设计个齿轮工艺数据库  哎
---华软网友回复---
加进去了 还是不行啊 第一次可以接着按第二次就出错
---华软网友回复---
BOOL CDC::Attach(HDC hDC)
{
   // only attach once, detach on destroy
ASSERT(m_hAttribDC == NULL);    // only attach to an empty DC

if (hDC == NULL)
return FALSE;
CHandleMap* pMap = afxMapHDC(TRUE); // create map if not exist
ASSERT(pMap != NULL);
pMap->SetPermanent(m_hDC = hDC, this);

SetAttribDC(m_hDC);     // Default to same as output
return TRUE;
}
按重试 跳出的是这个      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。