大家写打印输出程序时都是怎么写的?我的做法是用Adobe Acrobat 4.0做虚拟打印输出来查看自己写的输出效果,可是后来我才发现到了实际的打印后的效果根模拟的大不一样,它奶奶的,这个垃圾!!!!
解决方案 »
- 如何在Windows任务栏显示真彩图标?
- 滑动控件控制曲线图(VC)
- 在对话框之间如何传递数据库指针,名位大哥帮帮忙
- 如何通过IP访问其他机的数据库? 非常苦恼!
- 如何用vc在程序里调用一个excel格式的文件?
- 最近经常出现IE浏览器错误,而且越来越频繁?
- !暴难,各位大哥一定要帮个忙,CRcordSet::AddNew()究竟事将新的记录加在哪儿
- 网上down的一个工程,编译后出现 INTERNAL COMPILER ERROR!怎么回事?高手指点
- 关于开发设计文档。。。
- 请教类似pcanywhere的远程控制的实现原理?
- 这个问题难道就真的那么难吗?如何通过注册表和文件操作清除Word中最近使用文件列表。
- 关于dll的经典问题,在dll定义的资源,如何在其他程序中调用?
打印的话和在静态控件中绘制原理是一样的,因为WINDOWS通过设备上下文而非直接硬件来绘制,所以获得打印机DC即可。
参考以下简单代码:
--------------------------------
void CMyDlg::OnBtnPrint()
{
// TODO: Add your control notification handler code here CPrintDialog printDlg(false,PD_PAGENUMS | PD_USEDEVMODECOPIES|PD_COLLATE);
printDlg.m_pd.nMinPage=printDlg.m_pd.nFromPage=nYourFirstPage; //<<----
printDlg.m_pd.nMaxPage=printDlg.m_pd.nToPage=nYourEndPage; // <<----
if(AfxGetApp()->DoPrintDialog(&printDlg)!=IDOK) // <<----CWinApp 成员函数,产生打印对话盒。
{
AfxMessageBox("放弃打印!");
return;
} CDC printDC;
printDC.Attach(printDlg.m_pd.hDC); printDC.SetMapMode(MM_ANISOTROPIC); // <<----
printDC.SetWindowExt(sizeYourDrawRange.cx;,sizeYourDrawRange.cy);// <<------CSize sizeYourDrawRange
printDC.SetWindowOrg(0,0); // <<------
printDC.SetViewportExt(printDC.GetDeviceCaps(HORZRES),printDC.GetDeviceCaps(VERTRES)); // <<----
printDC.SetViewportOrg(0,0); //<<------ DOCINFO docInfo;
memset(&docInfo,0,sizeof(DOCINFO));
docInfo.cbSize=sizeof(DOCINFO);
docInfo.lpszDocName="your document name";// <<----
docInfo.lpszOutput=""; <<---- printDC.StartDoc(&docInfo);
for(int i=nYourFirstPage;i<=nYourFirstPage;i++)
{
printDC.StartPage();
DrawAllContents(..);// <<------ !!!!!! write your draw_code in the function
printDC.EndPage(); }
printDC.EndDoc(); printDC.Detach();
}
你的这段代码在使用时总会有2个GDI对象的泄漏,我也查不出来原因。每次打印时GDI总是在不断的增加2个。