CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何在VC文档视图结构中,编程实现自定义纸张的打印?高手指教!!!!!

楼主dkp999(dkp99)2004-09-01 23:55:36 在 VC/MFC / 基础类 提问

我用MFC文档视图结构的打印方法,但打印预览和打印都是同一个纸型,我该如何编程设置我自己需要的纸张大小呢,请高手指教!!!!! 问题点数:0、回复次数:10Top

1 楼memory_xj(青蛙)回复于 2004-09-02 00:11:13 得分 0

一般打印程序会根据你的CScrollView::SetScrollSizes(   int   nMapMode,   SIZE   sizeTotal,   const   SIZE&   sizePage   =   sizeDefault,   const   SIZE&   sizeLine   =   sizeDefault   );  
  来打印,你可以设定sizeTotal来自定义大小。但这时你又想在打印时用另一种大小,可以判断   CDC::IsPrinting来确定当前是否在打印状态,如果是TRUE,表示正在打印,你可以调用SetScrollSizes   ()设定纸张的不同大小而实现和视图显示不同的打印目的。Top

2 楼bluebohe(薄荷)回复于 2004-09-02 00:21:26 得分 0

OnPreparePrinting(CPrintInfo*   pInfo)里面修改pInfo  
   
          DEVMODE   FAR   *pDevMode=(DEVMODE   FAR   *)::GlobalLock(pInfo->m_pPD->m_pd.hDevMode);  
           
  //这里修改pDevMode的dmOrientation、dmPaperSize、dmPaperLength、dmPaperWidth成员  
   
                   
          ::GlobalUnlock(pInfo->m_pPD->m_pd.hDevMode);  
  Top

3 楼dkp999(dkp99)回复于 2004-09-02 21:08:48 得分 0

我是这样做的啊,但预览时还是没有变化啊,??????能给我个代码吗?Top

4 楼laiyiling(陌生人[MVP])回复于 2004-09-02 22:50:05 得分 0

使用自定义纸张要先设置pDevMode->dmPaperSize=0;  
   
  这里有篇文章可供参考:  
  http://www.vccode.com/file_show.php?id=2164  
  Top

5 楼dkp999(dkp99)回复于 2004-09-04 14:28:44 得分 0

大家帮我看看,我下面那里有问题啊?  
          HDC   PrintDC;    
  DOCINFO   docin;    
   
  docin.cbSize   =   sizeof(DOCINFO);    
  docin.lpszDocName   =   "TestDoc";    
  docin.lpszOutput   =   NULL;    
   
  CPrintDialog   PrintDialog(TRUE,PD_ALLPAGES|PD_NOPAGENUMS,NULL);    
  if(!PrintDialog.GetDefaults())   return;   //如果不用打印设置对话框,使这一行有效    
   
  // if(PrintDialog.DoModal()!=IDOK)    
  // return;   //显示打印设置对话框(不显示把这一行去掉)    
   
  PrintDC   =   PrintDialog.CreatePrinterDC();   //   返回一个打印DC句柄    
   
  //重新定义纸张大小    
  DEVMODE*   lpDevMode   =   (DEVMODE*)PrintDialog.GetDevMode();    
     
  lpDevMode->dmFields   |=   DM_PAPERSIZE;   //允许重新设置纸张大小  
  lpDevMode->dmPaperSize   =   DMPAPER_USER;   //设定为自定义纸张尺寸    
   
  lpDevMode->dmPaperLength   =   m_nHeight;    
                    lpDevMode->dmPaperWidth=m_nWidth;  
  ResetDC(PrintDC,lpDevMode);   //使设置的参数发挥作用    
   
  StartDoc(PrintDC,&docin);   //   启动打印工作    
  StartPage(PrintDC);   //   一页开始    
  TextOut(PrintDC,0,10,"打印内容",8);   //打印内容    
   
  EndPage(PrintDC);   //   一页结束    
  EndDoc(PrintDC);   //   终止打印工作    
   
  if(DeleteDC(PrintDC))    
  return;   //   删除打印机DC    
  else    
  {    
  AfxMessageBox("出错",MB_OK);    
  return;    
  }    
  Top

6 楼weakwater(我是河南人)回复于 2004-09-06 17:50:10 得分 0

帮你UPTop

7 楼lixiaosan(小三)回复于 2004-09-06 17:53:01 得分 0

DEVMODE结构里面有        
  short     dmPaperSize;  
          short     dmPaperLength;  
          short     dmPaperWidth;  
   
   
  Top

8 楼lixiaosan(小三)回复于 2004-09-06 17:59:57 得分 0

http://sanjianxia.myrice.com/vc/111.htmTop

9 楼countryboy(沉淀)回复于 2004-09-06 20:22:12 得分 0

学习`~!~!~~Top

10 楼dkp999(dkp99)回复于 2004-09-14 16:09:14 得分 0

和我的差不多啊,不行的啊,谁有更好的代码啊Top

相关问题

  • VC编程中使用自定义函数中的一个问题???
  • 菜鸟问题:如何在VC++中给视图类增加一个自定义消息?请给出步骤
  • vc的自定义消息
  • 如何编程给自定义类型的文件自定义图标
  • 如何在视图上添加自定义的背景!
  • 在视图中是否可以使用自定义变量?
  • 怎样让视图类使用自定义的listcontrol?
  • 求视图自定义列执行顺序?????
  • office开发中自定义菜单怎么编程??
  • VC中可以自定义消息。那么可以自定义事件吗?

关键词

  • 打印
  • 视图
  • 纸张
  • docin
  • 自定义
  • printdc
  • lpdevmode
  • printdialog
  • devmode
  • dmpapersize

得分解答快速导航

  • 帖主:dkp999

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo