编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 设置打印页面
  · 设置打印页面

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  110 篇
技术分:  1160 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 14:19:24
          楼主

设置打印页面
使用“页码设置”对话框可以进行设置纸张、页边距和打印方向等操作。可以通过CPageSetupDialog类的构造函数来构造“页码设置”对话框。
语法:
CPageSetupDialog( DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE, CWnd* pParentWnd = NULL );
参数说明:
 dwFlags:定制对话框的标志。
 pParentWnd:指向对话框父窗口的指针。
在设置“页码设置”对话框以后,可以调用GetMargins获得打印机当前的页边距设置。
语法
void GetMargins( LPRECT lpRectMargins, LPRECT lpRectMinMargins ) const;
参数说明:
 lpRectMargins:当前打印机的打印边距。
 lpRectMinMargins:当前打印机的最小打印边距。
例如,使用“打印设置”对话框设置打印方向,程序设计步骤如下:
(1)创建一个基于文档/视图结构的应用程序。
(2)打开菜单资源编辑器,在菜单资源中添加一个“页面设置”菜单项,如图1所示。
 
图1  菜单资源
(3)在视图类的头文件中声明变量,代码如下。
 int m_LeftMargin,m_TopMargin;      //左边距和上边距
 int screenx,screeny;         //屏幕每英寸像素数
 int printx,printy;            //打印机每英寸像素数
 double ratex,ratey;           //打印机与屏幕的像素比率
 CFont m_Font;                //文本字体
(4)通过类向导为“页面设置”菜单项处理单击事件,在该事件的处理函数中调用“页面设置”对话框,代码如下。
void CSetPageView::OnMenupageset()       //“页面设置”菜单项单击事件处理函数
{
 CPageSetupDialog dlg;        //构造“页面设置”对话框
 if (dlg.DoModal()==IDOK)        //显示页面设置对话框
 {
  CRect rect,minrect;        //声明区域对象
  dlg.GetMargins(rect,minrect);
  m_LeftMargin = rect.left/100;       //计算左边距单位是毫米
  m_TopMargin = rect.top/100;       //计算上边距单位是毫米
 }
}
 注意:GetMargins方法获取的页面大小单位是0.01毫米。
(5)重载OnBeginPrinting函数,在该函数中获得打印机每英寸像素数,并技术打印机与屏幕的像素比率,代码如下。
void CSetPageView::OnBeginPrinting(CDC* pDC, CPrintInfo* /*pInfo*/)
{
 //获取打印机每英寸像素数
 printx =pDC->GetDeviceCaps(LOGPIXELSX);
 printy =pDC->GetDeviceCaps(LOGPIXELSY); 
 //计算打印机与屏幕的比率
 ratex = (double)printx /screenx;
 ratey = (double)printy /screeny;
}
(6)重载OnDraw函数,在应用程序窗口中绘制打印文本,打印时在指定页面位置绘制文本,代码如下。
void CSetPageView::OnDraw(CDC* pDC)
{
 CSetPageDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 //获取屏幕每英寸像素数
 screenx =pDC->GetDeviceCaps(LOGPIXELSX);
 screeny =pDC->GetDeviceCaps(LOGPIXELSY);
 CString str;           //声明字符串
 str = "会当凌绝顶,一览众山小";       //设置字符串
 if(pDC->IsPrinting())          //判断是否打印
 {
  int leftmargin = int((m_LeftMargin / 25.4) * printx);    //将毫米转换为像素
  int topmargin  = int((m_TopMargin / 25.4) * printx);   //将毫米转换为像素
  m_Font.CreatePointFont(int(150*ratex),"宋体");    //创建字体
   pDC->SelectObject(&m_Font);       //将字体选入设备上下文
   pDC->TextOut(int(50 * ratex + leftmargin),
   int(50 * ratey + topmargin),str);      //绘制文本
 }
 else             //不打印时
 {
  m_Font.CreatePointFont(150,"宋体");     //创建字体
  pDC->SelectObject(&m_Font);       //将字体选入设备上下文
  pDC->TextOut(50,50,str);        //绘制文本
 }
 m_Font.DeleteObject();         //释放字体
}
程序运行效果如图2所示。
 
图2  默认设置时预览
选择“页面设置”对话框设置页边距,程序运行效果如图3所示。
  
图3  设置页面边距

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页