描述:
请问我在ActiveX中封装打印的一些函数,我可以startdoc 但是却不能enddoc返回的int 总是1,不知到我少了什么,请高手指教我在代码里少了什么?
代码如下:
BOOL CFJDCPrintButtonXCtrl::InitPrint()
{
// TODO: Add your dispatch handler code here
PRINTDLG ppd;
if (m_PrinterDC.m_hDC!=NULL)
return FALSE;
if (AfxGetApp()->GetPrinterDeviceDefaults(&ppd)==FALSE)
return FALSE;
/* if (PrintDlg(&ppd)==FALSE)
return FALSE;
*/ if (AfxGetApp()->CreatePrinterDC(m_PrinterDC)==FALSE)
return FALSE;
//m_PrinterDC.Attach(ppd.hDC);
m_PrinterDC.SetMapMode(MM_LOMETRIC);
m_PrinterDC.m_bPrinting=TRUE;
return TRUE;
}
BOOL CFJDCPrintButtonXCtrl::StartDoc()
{
// TODO: Add your dispatch handler code here
if (m_PrinterDC.m_hDC==NULL)
return FALSE;
if (m_PrinterDC.IsPrinting()==FALSE)
return FALSE;
int retval;
DOCINFO doc;
doc.lpszDocName=m_docName;
doc.lpszOutput=NULL;
doc.lpszDatatype=NULL;
doc.cbSize=sizeof(DOCINFO);
retval=m_PrinterDC.StartDoc(&doc);
if (retval==-1)
return FALSE;
return TRUE;
}
BOOL CFJDCPrintButtonXCtrl::StartPage()
{
// TODO: Add your dispatch handler code here
if (m_PrinterDC.m_hDC==NULL)
return FALSE;
if (m_PrinterDC.IsPrinting()==FALSE)
return FALSE;
int retval;
retval=m_PrinterDC.StartPage();
if (retval==-1)
return FALSE;
return TRUE;
}
BOOL CFJDCPrintButtonXCtrl::EndPage()
{
// TODO: Add your dispatch handler code here
if (m_PrinterDC.m_hDC==NULL)
return FALSE;
if (m_PrinterDC.IsPrinting()==FALSE)
return FALSE;
int retval;
retval=m_PrinterDC.EndPage();
if (retval==-1)
return FALSE;
return TRUE;
return TRUE;
}
BOOL CFJDCPrintButtonXCtrl::AbortDoc()
{
// TODO: Add your dispatch handler code here
if (m_PrinterDC.m_hDC==NULL)
return FALSE;
if (m_PrinterDC.IsPrinting()==FALSE)
return FALSE;
int retval;
retval=m_PrinterDC.AbortDoc();
if (retval!=0)
{
m_errorCode=retval;
return FALSE;
}
return TRUE;
}
BOOL CFJDCPrintButtonXCtrl::EndDoc()
{
// TODO: Add your dispatch handler code here
if (m_PrinterDC.m_hDC==NULL)
return FALSE;
if (m_PrinterDC.IsPrinting()==FALSE)
return FALSE;
int retval;
retval=m_PrinterDC.EndDoc();
if (retval!=0)
{
DWORD A;
A=GetLastError();
return FALSE;
}
return TRUE;
}
BOOL CFJDCPrintButtonXCtrl::ReleasPrint()
{
// TODO: Add your dispatch handler code here
if (m_PrinterDC.m_hDC==NULL)
return FALSE;
if (m_PrinterDC.DeleteDC()==FALSE)
return FALSE;
return TRUE;
}
BOOL CFJDCPrintButtonXCtrl::TextOut(LPCTSTR Text)
{
// TODO: Add your dispatch handler code here
BOOL retval;
if (m_PrinterDC.m_hDC==NULL)
return FALSE;
if (m_PrinterDC.IsPrinting()==FALSE)
return FALSE;
LOGFONT lfont,oldlfont;
CFont font,*oldfont;
oldf />
oldfont->GetLogFont(&oldlfont);
lf />
font.CreateFontIndirect(&lfont);
m_PrinterDC.SelectObject(font);
retval=m_PrinterDC.TextOut(m_currentX,m_currentY,Text,strlen(Text));
m_PrinterDC.SelectObject(oldfont);
return retval;
}
我得调用顺序时 INITPRINT-STARTDOC-STARTPAGE-TextOut-ENDPAGE-ENDDOC-RELEASEPRINT