请高手帮看看,为什么我打印的时候,打印机已经启动了,但打印的内容是空白的。以下是我的打印程序。void CprintTestDlg::Print(CDC *pDC)
{
CDC printDC;
         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=_T("Print Window");
if(printDC.StartDoc(&docInfo)<=0)
{
#ifdef _DEBUG
AfxMessageBox(_T("Start Doc Failed"));
#endif
printDC.Detach();
return;
}
printDC.StartPage();
printDC.SetMapMode(MM_TEXT);


    printDC.StretchBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,rect.Width(),rect.Height(),SRCCOPY); printDC.EndPage();
printDC.EndDoc(); printDC.Detach();}void CprintTestDlg::drawwave(CDC *pDC)
{
    CString string;
    HANDLE hFont=CreateFont(50, 50, 0, 0, 0, TRUE, 0, 0, 0, 0, 0, 0, 0, (LPCTSTR)"宋体");//Times New Roman
       pDC->SelectObject(hFont);
        pDC->SetBkMode(TRANSPARENT);
pDC->Rectangle(&rect);
pDC->ExtTextOut(100,100,  0,   0,   _T("我们都是中国人"),   NULL);
}void CprintTestDlg::OnBnClickedprint()
{   
     pWnd = GetDlgItem(IDC_COORD); // 获得对话框上的picture的窗口句柄
       pWnd->GetClientRect(&rect);         // 获取绘制坐标的文本框
       pDC = pWnd->GetDC();                 // 获得对话框上的picture的设备指针
  
       pOldBmp = NULL;                           // 将旧的位图指针置空
       // 创建内存绘图设备,使内存位图的DC与控件的DC关联
      memDC.CreateCompatibleDC(pDC); 
       memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
       pOldBmp = memDC.SelectObject(&memBitmap);
drawwave(&memDC);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,rect.Width(),rect.Height(),SRCCOPY);

Print(&memDC);// TODO: 在此添加控件通知处理程序代码
}

解决方案 »

  1.   

    你先尝试你这段代码能否正确的画出东西吧。
    如果打印的话,你这个兼容DC是不是是不是应该用打印DC,而不是Picture控件的DC啊。
      

  2.   

    if(!printDC.Attach(hDC)) 
    return; 

    else 

    printDC.Detach(); 
    return; 
    } 既然Attach没成功,为什么还Detach?printDC.StretchBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,rect.Width(),rect.Height(),SRCCOPY); 一样的宽高,为啥用StretchBlt?还有,没有操作打印机的几个函数返回值进行判断,代码质量太差了
      

  3.   

    HDC hdcPrint = GetDefaultPrinterDC();
    if(hdcPrint != NULL)
    {
    CDC MemDc;
    MemDc.Attach(hdcPrint);
    if(pDrawInfo!= NULL)
    {
      //应该用这个DC
    }
    }个人看法,不知道对不