📄 subject_35184.htm
字号:
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:擎天柱 回复日期:2003-04-04 16:14:01
<br>内容:1、strlen(ca[i].strColText)请改为ca[i].strColText.GetLenght()<BR>2、把TextOut改为DrawText<BR><BR>首先,在打印时可以传入屏幕DC进行测试,看看在屏幕上显示是否存在问题,如果没有则是在设置打印DC时除了问题。<BR><BR>请参考我的程序。<BR><BR>void CGridCtrl::Print(BOOL bIsAuto/*=FALSE*/)<BR>{<BR> CWaitCursor wait ;<BR> CDC dc;<BR> HDC hPrintDC = NULL ;<BR><BR> short dmCopies = 1 ;<BR> short dmCollate = DMCOLLATE_TRUE ;<BR> WORD nFromPage = 0 ;<BR> WORD nToPage = 0 ;<BR> DWORD dwFlags = PD_ALLPAGES ;<BR><BR> if( !bIsAuto )<BR> {<BR>// m_PreFrame = new CMainFrame(Drawf,this,this,TRUE);<BR> CPrintDialog printDlg(FALSE, PD_ALLPAGES | PD_RETURNDC | PD_NOSELECTION | <BR> PD_COLLATE | PD_NONETWORKBUTTON, this ) ;<BR><BR> printDlg.m_pd.nMinPage = 1 ;<BR> printDlg.m_pd.nMaxPage = 0xffff ;<BR> printDlg.m_pd.nFromPage = 1 ;<BR> printDlg.m_pd.nToPage = 1 ;<BR><BR> DWORD dwGetVer = GetVersion();<BR> if( dwGetVer & 0x80000000 )<BR> {<BR> // Windows 95 is loaded<BR> // Note, GetVersion will also return version number on Windows 95<BR> PAGESETUPDLG psd ;<BR> GlobalAllocPrinter(m_PageSetup.hDevMode, m_PageSetup.hDevNames, psd) ;<BR> printDlg.m_pd.hDevMode = psd.hDevMode ;<BR> printDlg.m_pd.hDevNames = psd.hDevNames ;<BR> }<BR> else<BR> {<BR> printDlg.m_pd.hDevMode = m_PageSetup.hDevMode ;<BR> printDlg.m_pd.hDevNames = m_PageSetup.hDevNames ;<BR> }<BR> if (printDlg.DoModal() != IDOK) // Get printer settings from user<BR> {<BR> ((CReportApp*)AfxGetApp())->ShowTooBarWindow(SW_SHOW) ;<BR> if( dwGetVer & 0x80000000 )<BR> {<BR> if( printDlg.m_pd.hDevMode != NULL)<BR> {<BR> GlobalFree(printDlg.m_pd.hDevMode) ;<BR> printDlg.m_pd.hDevMode = NULL ;<BR> }<BR> if( printDlg.m_pd.hDevNames != NULL)<BR> {<BR> GlobalFree(printDlg.m_pd.hDevNames) ;<BR> printDlg.m_pd.hDevNames = NULL ;<BR> }<BR> }<BR> return;<BR> }<BR> hPrintDC = printDlg.m_pd.hDC ;<BR> dc.Attach(hPrintDC); // attach a printer DC<BR> if( printDlg.m_pd.hDevMode != NULL )<BR> {<BR> DEVMODE* pDevMode = (DEVMODE*)GlobalLock(printDlg.m_pd.hDevMode) ;<BR> if( pDevMode != NULL )<BR> {<BR> dmCollate = pDevMode->dmCollate ;<BR> dmCopies = pDevMode->dmCopies ;<BR> }<BR> nFromPage = printDlg.m_pd.nFromPage ;<BR> nToPage = printDlg.m_pd.nToPage ;<BR> dwFlags = printDlg.m_pd.Flags ;<BR> GlobalUnlock(printDlg.m_pd.hDevMode) ;<BR> }<BR> }<BR> else<BR> {<BR> AfxGetApp()->SelectPrinter(m_PageSetup.hDevNames, m_PageSetup.hDevMode, FALSE);<BR> if( AfxGetApp()->CreatePrinterDC(dc) == FALSE )<BR> {<BR> ASSERT( FALSE ) ;<BR> return ;<BR> }<BR> }<BR> dc.m_bPrinting = TRUE;<BR> <BR> CString strTitle;<BR> strTitle.LoadString(AFX_IDS_APP_TITLE);<BR> <BR> if( strTitle.IsEmpty() )<BR> {<BR> CWnd *pParentWnd = GetParent();<BR> while (pParentWnd)<BR> {<BR> pParentWnd->GetWindowText(strTitle);<BR> if (strTitle.GetLength()) // can happen if it is a CView, CChildFrm has the title<BR> break;<BR> pParentWnd = pParentWnd->GetParent();<BR> }<BR> }<BR> <BR> DOCINFO di; // Initialise print doc details<BR> memset(&di, 0, sizeof (DOCINFO));<BR> di.cbSize = sizeof (DOCINFO);<BR> di.lpszDocName = strTitle;<BR> <BR> BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job<BR> <BR> CPrintInfo Info;<BR> Info.m_rectDraw.SetRect(0,0, dc.GetDeviceCaps(HORZRES), dc.GetDeviceCaps(VERTRES));<BR> <BR> // SetPrintMarginInfo(2, 2, m_PageSetup.<BR> OnBeginPrinting(&dc, &Info); // Initialise printing<BR><BR> if( dmCollate == DMCOLLATE_TRUE )<BR> {<BR> for (UINT page = Info.GetMinPage(); page <= Info.GetMaxPage() && bPrintingOK; page++)<BR> {<BR> if( dwFlags & PD_PAGENUMS )<BR> {<BR> if( page > nToPage || page < nFromPage )<BR> continue ;<BR> }<BR> dc.StartPage(); // begin new page<BR> Info.m_nCurPage = page;<BR> OnPrint(&dc, &Info); // Print page<BR> bPrintingOK = (dc.EndPage() > 0); // end page<BR> }<BR> }<BR> else<BR> {<BR> for (UINT page = Info.GetMinPage(); page <= Info.GetMaxPage() && bPrintingOK; page++)<BR> {<BR> for(int i=0;i<dmCopies;i++)<BR> {<BR> if( dwFlags & PD_PAGENUMS )<BR> {<BR> if( page > nToPage || page < nFromPage )<BR> continue ;<BR> }<BR> dc.StartPage(); // begin new page<BR> Info.m_nCurPage = page;<BR> OnPrint(&dc, &Info); // Print page<BR> bPrintingOK = (dc.EndPage() > 0); // end page<BR> }<BR> }<BR> }<BR> OnEndPrinting(&dc, &Info); // Clean up after printing<BR> <BR> if (bPrintingOK)<BR> dc.EndDoc(); // end a print job<BR> else<BR> dc.AbortDoc(); // abort job.<BR> <BR> if( bIsAuto )<BR> dc.DeleteDC() ;<BR> else<BR> {<BR> dc.Detach() ;<BR> if( hPrintDC != NULL )<BR> ::DeleteDC( hPrintDC ) ;<BR> }<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -