求设置打印上下左右边距问题!

dxb321 2005-01-09 02:09:45
我在编写打印程序时,在不同打印机上发现打印的边距不一样.请问怎么设置?我使用pDC->SetViewportOrg(CPoint(-100,-100))时只能调节打印区域的上下左右移动,而无法条件大小!
...全文
571 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
aoosang 2005-01-10
  • 打赏
  • 举报
回复
晕倒,楼上的两位老大居然已经贴出答案了,接分
qrlvls 2005-01-09
  • 打赏
  • 举报
回复
应该是你想要的东西了
http://cvs.sourceforge.net/viewcvs.py/cdexos/cdexos/LineList.cpp?rev=1.14

#define PRINTMARGIN_Y 0.50
#define PRINTMARGIN_X 0.50
#define PRINTMARGINY ((int)((double)pDC->GetDeviceCaps(LOGPIXELSY)*PRINTMARGIN_Y))
#define PRINTMARGINX ((int)((double)pDC->GetDeviceCaps(LOGPIXELSX)*PRINTMARGIN_X))
#define LINESPACING ((csCharSize.cy * 6)/5)

void LListCtrl::OnPrint(CString strHeader, CString strFooter, DWORD dwFlags)
{
CRect crPrintedPage;
CSize csCharSize;
CPoint cpCurPos;
DWORD dwLinesPerPage;
DWORD dwPagesTotal;
DWORD dwLinesTotal;
CFont Font;
CDC *pDC;

// confirm null-list print:
if( GetItemCount() == 0 && AfxMessageBox( _T( "" ), MB_OKCANCEL | MB_ICONQUESTION) == IDCANCEL )
{
return;
}

// Create and do a print setup dialog (bPrintSetupOnly=TRUE to get a more useful dialog, loses the "print all/select" and "copies" controls):
CPrintDialog dlg(TRUE,PD_ALLPAGES|PD_RETURNDC,NULL);
dlg.m_pd.Flags |= PD_NOSELECTION;
if(dwFlags&LLC_LANDSCAPE)
...
Kudeet 2005-01-09
  • 打赏
  • 举报
回复
http://search.csdn.net/Expert/topic/863/863452.xml?temp=9.893435E-02

您可以尝试使用CRichEditView::SetMargins函数来设置打印的边距,该函数的原型如下:
void SetMargins(
const CRect& rectMargin
);

参数是要设定的新的边距的值,单位是MM_TWIPS。

您可以参看MSDN上面一个获取打印纸的大小,以及设置打印边距的例子:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cricheditview.3a3a.getpapersize.asp

关于SetMargins函数的详细信息,您可以参看:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_CRichEditView.3a3a.SetMargins.asp
reprint 使用说明 本人长期使用delphi做数据库的开发,报表控件使用Quickrpt,在打印上经常遇到一些问题,于是自己经常编写一部分打印的程序,经过总结开发了这个控件。 本控件可打印 datasource,dbgrid,stringgrid. 一 、控件属性: 1、colstitle 设置报表的列标题属性 (1)alignment 列标题对齐方式。 (2)font 列标题字体 (3)print 设置是否打印列标题 (4)rowspace 列标题行的高度 2、datasource 选择要打印的datasource 3、dbgrid 选择要打印的dbgrid 4、stringgrid 选择要打印的stringgrid 5、detail 设置打印的明细数据属性 (1)arrange 设置明细字段排列方向 Horizontal 横向打印(默认的一般打印) Vertical 竖向打印(字段竖向排列适合打印字段内容较长的报表如“会议纪录”) (2)aotureturn 打印明细字段时,如果字段超过列的宽度是否允许自动换行 (3)colsline 设置竖线属性引用tpen类 (4)footer 设置明细尾 (5)frame 设置明细边框属性引用tpen类 (6)head 设置明细头同footer (7)rowsline 设置横线属性引用tpen类 (8)rowspace 设置明细行的高度 (9)top 明细与标题的距离 6、page 设置纸张的上下左右边距 7、pagefooter 设置页脚同明细尾 8、pageheader 设置页眉同页脚 9、printobject 选择要打印的对象 (datasource 、dbgrid、 stringgrid ) 10、title 设置标题类页眉、页脚 二 、控件方法: (1) preview 预览 (2) print 打印 (3) SaveToFile() 保存为报表文件 (4) SaveToStream() 保存为流(然后就可把整个报表存到数据库了很方便哦! ~_~) (5) PrintFile() 打印报表文件 (6) PrintStream() 打印流(流的数据库存取就不用多说了吧) (7) PreviewFile() 预览文件 (8) PreviewStream() 预览流 (9) OptionToStream() 报表的属性保存为流 (10) OptionFromStream() 从流中得到报表属性 三、 控件事件: AfterPrint 打印后 BeforePrint 打印前 (本来很多事件,但没有预览,后来加上预览以及一些方法后实现很困难就去掉了!) 四、注意事项 (1) text 属性,输入“¦;;;;;;;#¦;;;;;;;”打印页码值,如果想打印页码可输入“第¦;;;;;;;#¦;;;;;;;页” 输入“¦;;;;;;;RecordCount¦;;;;;;;”打印 记录数 (2) 不同的打印机,打印和预览效果可能有一点点不同(保证数据打印完全正确一致)。本人用一台针式和一台激光打印机做测试,开始差别较大后经过调试基本一致,不知其他打印机如何。 就这些个吧基本满足了我的软件开发需要,解决了很多问题,关键是做报表省了很大力气,当然了很复杂的报表还是要其它报表控件来解决。如果有其他问题或好的建议可与我联系。 程序设计:吴进昊 E-mail :jinhaowu@hotmail.com qq :54254770 2003.01.03

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧