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

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



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

设置打印方向
“打印设置”对话框也是使用CPrintDialog类创建的,将bPrintSetupOnly参数设置为TRUE,就可以构造“打印设置”对话框。然后在GetDevMode方法可以获得包含打印机的初始化信息和环境信息的DEVMODE结构指针,DEVMODE结构中成员dmOrientation保存打印方向,可选值有两个,为DMORIENT_LANDSCAPE值时是横向打印,为DMORIENT_PORTRAIT值时是纵向打印。
例如,使用“打印设置”对话框设置打印方向,程序设计步骤如下:
(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改“使用打印设置对话框设置打印方向”。
(2)选择工作区窗口的RecourceView选项卡,导入3个图标资源。
(3)在对话框头文件中声明变量,代码如下。
 CToolBar  m_ToolBar;        //工具栏对象
 CImageList m_ImageList;        //列表视图对象
 CString   str[7];         //保存打印字符串的字符串数组
 CFont  font;          //字体对象
 int    screenx,screeny;       //窗口每英寸像素数
 int    printx,printy;        //打印机每英寸像素数
 double   ratex,ratey;        //打印机与屏幕的像素比率
 BOOL   m_IsWay;         //打印方向
(4)在对话框的OnInitDialog函数中创建工具栏并设置打印文本,代码如下。
 m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);  //创建图像列表
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));   //向图像列表中添加图标
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));    //向图像列表中添加图标
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));    //向图像列表中添加图标
 UINT array[3]={10000,10001,10002};      //声明数组
 m_ToolBar.Create(this);         //创建工具栏窗口
 m_ToolBar.SetButtons(array,3);       //设置工具栏按钮索引
 m_ToolBar.SetButtonText(0,"打印设置");      //设置工具栏按钮文本
 m_ToolBar.SetButtonText(1,"打印");       //设置工具栏按钮文本
 m_ToolBar.SetButtonText(2,"退出");       //设置工具栏按钮文本
 m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);  //关联图像列表
 m_ToolBar.SetSizes(CSize(60,50),CSize(32,32));     //设置按钮和图标的大小
 m_ToolBar.EnableToolTips(TRUE);       //激活工具栏的提示功能
 //显示工具栏
 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
 //设置打印文本
 str[0] = "花间一壶酒,独酌无相亲。rn";
 str[1] = "举杯邀明月,对影成三人。rn";
 str[2] = "月既不解饮,影徒随我身。rn";
 str[3] = "暂伴月将影,行乐须及春。rn";
 str[4] = "我歌月徘徊,我舞影凌乱。rn";
 str[5] = "醒时同交欢,醉后各分散。rn";
 str[6] = "永结无情游,相期渺云汉。rn";
 m_IsWay = TRUE;          //设置默认打印方向
 提示:我们在创建工具栏、状态栏等控件时,创建后需要调用RepositionBars方法来调整工具栏或状态栏的位置和大小,并且显示工具栏或状态啦。
(5)处理WM_CTLCOLOR消息,在该消息中将对话框的背景颜色改为白色。
(6)定义一个自定义函数DrawText,用于绘制打印好预览的文本,代码如下。
void CSetPrintDlg::DrawText(CDC *pDC, BOOL isprinted)
{
 if(!isprinted)            //预览
 {
  ratex = 1;           //当预览时设置比率为1
  ratey = 1;           //当预览时设置比率为1
 }
 else             //判断是打印
 {
  pDC->StartDoc("printstart");       //开始打印
 }
 font.CreatePointFont(120,"宋体",pDC);      //创建字体
 for(int i=0;i<7;i++)          //设置循环
 {
  pDC->SelectObject(&font);       //将字体选入设备上下文
  pDC->TextOut(int(50*ratex),int((80+i*30)*ratey),str[i]);  //打印文本
 }
 if(isprinted)           //判断是打印
 {
  pDC->EndDoc();         //结束打印
 }
 font.DeleteObject();          //释放字体
}
(7)处理工具栏中“打印设置”按钮的单击事件,判断获得打印方向,代码如下。
void CSetPrintDlg::OnSet()         // "打印设置"按钮的单击事件处理函数
{
 DWORD dwflags = PD_ALLPAGES | PD_NOPAGENUMS | PD_USEDEVMODECOPIES
  | PD_SELECTION | PD_HIDEPRINTTOFILE;     //设置"打印设置"对话框属性
 CPrintDialog dlg(TRUE,dwflags,NULL);      //构造"打印设置"对话框
 if(dlg.DoModal()==IDOK)         //显示“打印设置”对话框
 {
  LPDEVMODE dev = dlg.GetDevMode();     //获得打印机信息
  if(dev->dmOrientation == DMORIENT_PORTRAIT)   //判断是否为纵向打印
    m_IsWay = TRUE;        //纵向打印
  else
   m_IsWay = FALSE;        //横向打印
 }
}
(8)处理工具栏中“打印”按钮的单击事件,调用“打印”对话框进行打印,代码如下。
void CSetPrintDlg::OnPrint()         //"打印"按钮的单击事件处理函数
{
 DWORD dwflags = PD_ALLPAGES | PD_NOPAGENUMS | PD_USEDEVMODECOPIES
  | PD_SELECTION | PD_HIDEPRINTTOFILE;     //设置"打印"对话框属性
 CPrintDialog dlg(FALSE,dwflags,NULL);      //构造"打印"对话框
 if(dlg.DoModal()==IDOK)         //显示"打印"对话框
 {
  LPDEVMODE dev = dlg.GetDevMode();     //获得打印机信息
  if(m_IsWay)
   dev->dmOrientation = DMORIENT_PORTRAIT;  //设置纵向打印
  else
   dev->dmOrientation = DMORIENT_LANDSCAPE;  //设置横向打印
  CDC dc;           //声明设备上下文
  dc.Attach(dlg.CreatePrinterDC());      //创建打印机设备上下文
  printx = dc.GetDeviceCaps(LOGPIXELSX);    //获得打印机像素
  printy = dc.GetDeviceCaps(LOGPIXELSY);    //获得打印机像素
  ratex  = (double)(printx)/screenx;      //计算屏幕好打印机像素比率
  ratey  = (double)(printy)/screeny;       //计算屏幕好打印机像素比率
  DrawText(&dc,TRUE);        //绘制打印文本
 }
}
程序运行效果如图1所示。
 
图1  使用打印设置对话框设置打印方向

 

 

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