我要把多个DC放到一个pDC上显示,打印;就是说我要在一个pDC上的不同位置贴上若干个DC, 如知道请告知生成DC 到粘贴到pDC上的整个过程。谢谢!
解决方案 »
- 为什么wsastartup始终报错,而且错误代码不是msdn里提到的哪些
- JavaScript无法动态为ATL编写的ActiveX控件添加事件
- 调用fwrite函数为什么用\n不能在文件中写入换行?
- re.Field("side") = _T("1");中的re.Field是什么意思?
- 请问怎样去掉CPropertySheet上方的Tab?
- 请 richestbeggar(richestbeggar) 进来接分
- 保存文件的问题,急急!!
- 紧急请教如何将一幅图片的颜色减少到100种以下而图像尽量不失真
- 动态库链接问题
- ?高分请教!请问在InstallShield中如用实现Uninstall选择
- 如何用代码实现网站的登录功能,用户名和密码可写死在代码中.
- 极度郁闷!!!! 狂散1000分!!!(5)满20个结帖,后来的朋友请跟后面的帖子!斑竹手下留情,谢谢!
把与多个DC分别兼容的CBitmap,一个一个拷到pDC上去
HBITMAP hBmp = ::CreateCompatibleBitmap(hdc, nWidth, nHeight);
HBITMAP hBmpOld = (HBITMAP)::SelectObject(hdc, hBmp);
...................................
你的操作
...................................
然后
::BitBlt(pDC->m_hDC, 0, 0, nWidth, nHeight, hdc, 0, 0, SRCCOPY);
::SelectObject(hdc, hBmpOld);
::DeleteObject(hBmp);
{
int iRow,iCol; //行列ループの変数
CBrush cbTmp(RGB(255, 255, 255)); //刷子を色
CRect crTmp; //印刷用のDC対象
CBitmap BmpPrint;
CBitmap *BmpOldPrint;
CDC DcPrint;
// CDC *pDcPrint;
//対象用のDC対象
CBitmap BmpObject;
CBitmap *BmpOldObject;
CDC DcObject; BCSheetType* pTmpPos; double dPaperLength; //紙の長さ
double dPaperWidth; //紙の幅 CBusinessCardDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
//シート類型の対象
pTmpPos = (BCSheetType*)(m_plSheetType[m_pstLayout->usSheetType]);
dPaperLength = pTmpPos->dTopBlank + pTmpPos->dBottomBlank
+ pTmpPos->dRowInterval * (pTmpPos->iMaxRow -1) + pTmpPos->dSheetHeight * pTmpPos->iMaxRow;
dPaperWidth = pTmpPos->dLeftBlank + pTmpPos->dRightBlank
+ pTmpPos->dCowInterval * (pTmpPos->iMaxCol -1) + pTmpPos->dSheetWidth * pTmpPos->iMaxCol;
//メモリDCの実体となるビットマップを作成
//BmpPrint.CreateCompatibleBitmap(pDC, (int)pTmpPos->dSheetWidth, (int)pTmpPos->dSheetHeight);
BmpPrint.CreateCompatibleBitmap(pDC, m_crClinetRect.right, m_crClinetRect.bottom);
DcPrint.CreateCompatibleDC(pDC);
//メモリDCにビットマップを選択
BmpOldPrint = DcPrint.SelectObject(&BmpPrint);
m_pPrintDC = &DcPrint;
m_pPrintDC->PatBlt(0,0,m_crClinetRect.right, m_crClinetRect.bottom,WHITENESS);
//指定された描画コード
DcPrint.SetMapMode(MM_TEXT); for(iRow=0; iRow< pTmpPos->iMaxRow; iRow++){
for(iCol=0; iCol<pTmpPos->iMaxCol; iCol++){
//白色区を描く
crTmp.top = (long)((pTmpPos->dTopBlank + m_pstLayout->dEquipBlankTop) * (-10) + (pTmpPos->dSheetHeight + pTmpPos->dRowInterval) * (-10) * iRow);
crTmp.left = (long)((pTmpPos->dLeftBlank + m_pstLayout->dEquipBlankLeft) * 10 + (pTmpPos->dSheetWidth + pTmpPos->dCowInterval) * 10 * iCol);
crTmp.right = crTmp.left + (long)(pTmpPos->dSheetWidth * 10);
crTmp.bottom = crTmp.top + (long)(pTmpPos->dSheetHeight * (-10));
m_pPrintDC->FillRect(&crTmp, &cbTmp);
m_pPrintDC->MoveTo(crTmp.left, crTmp.top);
m_pPrintDC->LineTo(crTmp.right, crTmp.top);
m_pPrintDC->LineTo(crTmp.right, crTmp.bottom);
m_pPrintDC->LineTo(crTmp.left, crTmp.bottom);
m_pPrintDC->LineTo(crTmp.left, crTmp.top);
//対象を描く
DrawObjects(&crTmp,a_iSide);
//名刺対象メモリDCの画像(即ちビットマップの内容)を実際の画面に転送
//m_pPrintDC->BitBlt(crTmp.left, crTmp.top, crTmp.right, crTmp.bottom, m_pPrintDC, 0, 0, SRCCOPY);
}
}
//メモリDCのビットマップを戻す
DcPrint.SelectObject(BmpOldPrint);
}
HBITMAP hBmpOld = (HBITMAP)::SelectObject(hdc, hBmp);
...................................
你的操作
...................................
然后
::BitBlt(pDC->m_hDC, 0, 0, nWidth, nHeight, hdc, 0, 0, SRCCOPY);
::SelectObject(hdc, hBmpOld);
::DeleteObject(hBmp);