在VC对话框中实现打印和打印预览

合集下载

电力变压器在线监测及故障诊断分析系统——说明报告(关於软件的使用)

电力变压器在线监测及故障诊断分析系统——说明报告(关於软件的使用)

电力变压器在线监测及故障诊断分析系统说明报告华中科技大学目录1. 概述 (3)1.1. 用途 (3)1.2. 使用环境 (3)1.3. 技术特点 (3)2. 主要技术参数 (4)2.1. 额定数据 (4)2.2. 通信方式 (4)2.3. 诊断方式 (4)2.4. 设定参数 (4)3. 诊断工作原理 (5)4. 通信软件使用说明 (7)4.1. 连接MIS系统 (7)4.2. 连接铁芯接地电流装置 (7)5. 客户端软件使用说明 (9)5.1. 主界面 (9)5.2. 用户管理 (10)5.3. 数据获取 (11)5.4. 系统查询 (13)5.5. 诊断分析 (14)5.6. 系统设置 (15)6. 运行与维护 (17)6.1. 一般检查 (17)6.2. 投运前装置的设置与检查. (17)6.3. 运行时检查 (17)6.4. 使用注意事项 (17)6.5. 常见故障处理指南 (17)1.概述1.1. 用途对主变压器进行在线监测,获取反映变压器绝缘状况的关键参数,包括铁芯接地电流、油中气体组分两部分在线获取数据,以及预防性试验、油化学试验、缺陷等历史数据,从多个角度实时全面反映运行变压器的绝缘状态,并对其绝缘状况做出分析、诊断。

系统实现自动运行及数据上网功能,对监测结果建立状态监测数据库,并进行数据管理、分析、统计、整合,为电力变压器状态检修提供辅助分析和决策依据。

1.2. 使用环境本系统服务器安装于变电站内。

为便于与“变压器铁心接地电流报警系统”进行RS485通信,需安装在该系统工控机附近;同时,系统需连接供电局局域网,以实现数据获取和上网功能。

1.3. 技术特点1)软件平台采用Visual C++6.0编写,使用操作系统为WindowsXP系统,数据库采用SQLServer2000 SP4。

2)实现与“变压器铁心接地电流报警系统”、“MIS生产管理数据整合与集中应用业务平台”、“在线油气色谱分析系统”通信,获取与变压器相关数据,并整合录入数据库。

CSharp打印功能的实现

CSharp打印功能的实现
3、在解决方案资源管理器中,右键单击“引用”,然后单击“添加引用”。
4、在“添加引用”对话框中,双击“System.Drawing.dll”和“System.Windows.Forms.dll”,然后单击“确定”。
5、将RichTextBoxPrintCtl.cs中的现有代码替换为以下代码:
using System;
this.btnPageSetup.Click += new System.EventHandler(this.btnPageSetup_Click);
12、将下面的代码添加到Form1类:
private int checkPrint;
private void btnPageSetup_Click(object sender, System.EventArgs e)
}
[StructLayout(LayoutKind.Sequential)]
private struct FORMATRANGE
{
public IntPtr hdc; //Actual DC to draw on
public IntPtr hdcTarget; //Target DC for determining text formatting
7、在“工具”菜单上,单击“自定义工具箱”。
8、在“.NET Framework组件”选项卡上,单击“浏览”,单击以选中“RichTextBoxPrintCtrl.dll”,然后单击“确定”。
9、将RichTextBoxPrintCtrl从工具箱拖入Form1。
10、在解决方案资源管理器中,右键单击Form1.cs,然后单击查看代码。
rectToPrint.Left = (int)(e.MarginBounds.Left * anInch);

C#打印、打印预览、页面设置案例

C#打印、打印预览、页面设置案例
案例:设计一个编辑处理程序,可以编辑和打印、打印预览文档。
操作方式:
1.新建一个项目,其中有两个form(Form1,Form2)
2.在Form1中添加菜单mainMenu1,一个richTextBox1(定义为Public),一个打印文档控件PrintDocument,名称为MyPrintDC。一个状态栏名称为myStatus。
关于(mnAbout)
3.在Form2中添加一个标签:查找内容,文本(txtSearch),命令按钮(btnSearch) 查找一下个,命令按钮(btnCancel)取消
4.Form1中代码:
加入引用:
using System.IO;
在控件定义阶段中加入:
private StringReader myReader;
Graphics myGraphics=e.Graphics;
Font myPrintFont=this.richTextBox1.Font;
//计算一页行数
float iLinePage=e.MarginBounds.Height/myPrintFont.GetHeight(myGraphics);
this.richTextBox1.SelectedText ="";
this.mnCopy.Enabled =false;
this.mnCut.Enabled =false;
this.mnPaste.Enabled =true;
}
}
}
复制菜单(mnCopy):
if (this.richTextBox1.SelectedText!="")
{

vc 实现打印功能

vc 实现打印功能

vc 实现打印功能vc 实现打印功能分类:VC 6.0/MFC 2011-11-29 21:16 852人阅读评论(1) 收藏举报Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这个问题很复杂,不知道如何下手。

本例针对这个问题,介绍一种简单的方法实现文字串的打印功能,读者朋友可以在此基础上稍微改动一下,就可以实现文件、图像的打印功能。

一、实现方法在Windows 操作系统下,显示器、打印机和绘图仪都被视为输出设备,正常情况下,系统默认的输出设备是显示器。

要使用打印机,首先需要创建一个指向打印机的设备环境句柄,然后通过该句柄调用相关的绘图函数把所需的文字和图形输出至打印机上。

当打印结束后,删除这个设备环境句柄即可。

当Windows系统中安装好打印机后,系统总是自动设置一个打印机为系统的默认打印机,在Windows的启动配置文件Win.ini中的[window]段中列出了带有关键字device的默认打印机。

下面是某一机器中Win.ini中的[Windows]字段的内容:[windows]load=run=NullPort=Nonedevice=HP LaserJet 4050(computer000),HPBFDB1,LPT1在上述关键字device后的字符串中,包含了系统中默认打印机的三个重要属性,它们依次是打印机的设备名HP LaserJet 4050(computer000),驱动程序名是HPBFDB1,输出端口为LPT1。

为了操纵系统默认的打印机,实现程序的打印功能,在程序中可调用API函数GetProfileString ()从Win.ini文件中获得device这个设备字符串,该函数的原型为:DWORD GetProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize)。

C#实现打印与打印预览功能

C#实现打印与打印预览功能

在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。

打印操作通常包括以下四个功能:1 打印设置设置打印机的一些参数,比如更改打印机驱动程序等;2 页面设置设置页面大小纸张类型等3 打印预览类似于word中的打印预览4 打印实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所有的与打印有关的事件和方法这个类包括以下几个属性,事件和方法1、PrinterSettings 属性存放打印机的设置信息,这个属性不需要程序员设置,因为它是由打印对话框获取的.2、PrintCountroller 属性控制打印过程3、DefaultPageSettings 属性存放页面设置信息,打印纸大小方向等,也不需要程序员设置,因为它是由页面设置对话框获取的.4、DocumentName 属性指定文档名称,出现在打印机状态窗口中1。

BeginPrint事件在打印之前发出2. PrintPage事件每打印一页是发出,事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息PrintPageEventArgs参数有很多重要的属性1 Cancel 取消打印2 Graphics页面的绘图对象3 HasMorePages 是否还有要打印的页面Print方法:该方法没有参数调用它将按照当前设置开始打印.若实现打印功能首先构造PrintDocument对象添加打印事件1: PrintDocument printDocument;2:privatevoid InitializeComponent()3: {4: ...5:// 这里的printDocument对象可以通过将PrintDocument控件拖放到窗体上来实现,注意要设置该控件的PrintPage事件。

MFC打印和打印预览

MFC打印和打印预览

MFC打印和打印预览MFC提供了一个框架性的打印和打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为一,即都由此文档关联的CView中的OnDraw(CDC *pDC)来处理,由MFC框架根据用户的操作来决定传进来的pDC是指向屏幕还是打印机,当pDC指向屏幕设备,就在屏幕上显示文档,当指向打印机设备时就打印文档。

这些都很好理解,但是,当我们要打印预览时,传进来的pDC就有些特别了。

因为打印预览是在屏幕上进行的,所以通常我们会认为这时传进来的pDC一定也是属于屏幕DC一类的。

但是其实不然,这个pDC是根据当前默认的打印机的属性来构造的。

举个例子,我的计算机上安装了一个打印机,它的默认打印纸是A4大小(210mm X 297mm),而它的默认分辨率是1200dpi。

当打印预览时Cview::OnDraw函数中的pDC指向的就是那个用来预览输出的DC,现在我们调用pDC->GetDeviceCaps(HORZSIZE),pDC->GetDeviceCaps(VERTSIZE),这两个函数用来取得DC显示区域的大小,以毫米为单位,得到的返回值为210和297,这恰好就是A4纸的大小。

接着再调用pDC->GetDeviceCaps(HORZRES),pDC->GetDeviceCaps(VERTRES),这两个调用返回的也是DC显示区域的大小,不过单位是象素(或者说是点dot),得到的值是9917和14031。

让我们看看这两个值与上面的210和297有什么关系。

1英寸等于25.4毫米,那么210毫米的长度按照1200dpi的分辨率能容纳多少点?当然是210/25.4×1200,算算看等于多少?没错,就是9917左右(实际是9921.259……),同样可以将297换算成14031。

现在来看看另外一个问题。

当我们用MemDC.CreateCompatibleDC(pDC)来创建一个与pDC兼容的内存DC时,调用GetDeviceCaps(HORZSIZE)等函数得到的值是否与pDC的一样呢?答案是不一样。

Visual Studio 2008 SP1 MFC新增功能包编程简介

Visual Studio 2008 SP1 MFC新增功能包编程简介

第13章 MFC功能包编程简介VS08 SP1所含的VC08的MFC功能包(MFC Feature Pack for Visual C++ 2008),在MFC 9.0的基础上增加137个新类(及86个内部类)和1个新结构。

功能包对传统MFC库进行了扩展,以支持时髦的现代用户界面元素,如Office Fluent(流畅)UI、停靠窗口和MDI选项卡(tab)窗口(似Visual Studio 2005/2008)、增强型工具条、丰富的新控件集、支持总体视觉样式(overall visual style)、支持桌面报警(desktop alerts)等等。

程序员可以利用该功能包编写具有类似于微软公司新版的Microsoft Office、Visual Studio或Internet Explorer等流行界面视觉样式的应用程序。

MFC功能包的改进主要体现在新型用户界面上,主要包括:功能区(ribbon)、选项卡(tab)窗口和窗格(pane)、视觉样式切换(换肤)、可停靠与自动隐藏的控制条和窗格等。

MFC功能包的帮助信息,位于MSDN的“目录\开发工具和语言\Visual Studio文档\Visual C++\参考信息\Libraries Reference\MFC Feature Pack for Visual C++ 2008”,主要内容在其“Reference\Classes”子目录中。

在VS2010中,MFC功能包已被完全并入MFC,所以其帮助系统也被并入标准的MFC 帮助系统之中,位于MSDN的“目录\开发工具和语言\Visual Studio文档\Visual C++\参考信息\Libraries Reference\MFC”,主要内容也在其“Classes”子目录中。

13.1 新增功能MFC功能包在用户界面方面增加了许多新功能,包括对传统界面元素的改进和若干新增的界面元素。

13.1.1 传统界面元素的改进MFC功能包,对菜单、工具条、对话框和控件等传统界面元素,进行了大量改进,以适应时髦用户界面的需要。

在VC对话框中实现打印和打印预览

在VC对话框中实现打印和打印预览

在VC对话框中实现打印与打印预览〔附实现步骤〕时间:2021-01-27 作者:佚名在一般软件开发中打印与打印预览是经常要用到功能,对于VC6.0中文档/视图(Doc/View)框架,可以很方便使用缺省打印与打印预览。

但是,如果应用程序是基于对话框就没有方法利用这种便利。

而很多情况下,基于对话框程序也需要打印与打印预览功能。

那该怎么办呢这正是本文将要解决问题。

1 实现打印在对话框应用程序中不具备MFC视与框架交互,要想实现打印与打印预览必须直接获取打印机设备环境句柄,这时可以设置CPringDialog类中构造函数参数,获取打印机设备环境句柄。

利用这个句柄,转换为指针,那么按打印流程实现打印任务。

(1)从CFrameWnd类派生出主窗口类CMyFrameWnd参加工程,这个类将作为控制类来实现程序打印与打印预。

(2)在CMyFrameWnd中参加打印与打印预览相关函数,为了方便起见,名字与CView视图类中缺省打印与打印预览虚函数名一样。

但这些函数是以成员函数形式参加,而不是重载。

这里主要介绍Print与OnPrint函数。

Print函数是打印控制函数,由它来弹出打印对话框,取得用户设置信息,如打印机、纸张大小等。

还有建立一个打印机DC与设置DOCINFO构造,该构造包含输入输出文件名及其它一些信息,StartDoc函数要该构造作参数。

还要设置打印区域,调用打印函数等void CMyFrameWnd::Print()CDC dc;CPrintDialog printDlg(FALSE);if (printDlg.DoModal() != IDOK)//弹出打印对话框,取得用户设置参数return;dc.Attach(printDlg.GetPrinterDC());//绑定一个打印机DC到CDCdc.m_bPrinting=TRUE;DOCINFO di; //初始化打印机DOCINFOmemset(&di,0,sizeof (DOCINFO));di.cbSize=sizeof (DOCINFO);BOOL bPrintingOK=dc.StartDoc(&di); //开场一个打印任务CPrintInfo Info;Info.m_rectDraw.SetRect(0,0,dc.GetDeviceCaps(HORZRES), c.GetDeviceCaps(VERTRES));//设置打印区域大小OnBeginPrinting(&dc,&Info); //打印初始化for (UINT page = Info. GetMinPage ( ); page < = Info. GetMaxPage() && bPrintingOK; page++)dc.StartPage(); //开场一个新打印页Info.m_nCurPage=page;OnPrint(&dc,&Info); //打印bPrintingOK=(dc.EndPage() > 0); //打印页完毕OnEndPrinting(&dc,&Info); //打印完成后释放资源if (bPrintingOK)dc.EndDoc(); //一个打印任务完毕elsedc.AbortDoc(); //终止打印任务dc.Detach(); //释放打印机DCOnPrint函数主要设置映射参数,调用对话框绘图函数等功能,具体如下:void CMyFrameWnd::OnPrint(CDC *pDC,CPrintInfo*pInfo)//if (!pDC || !pInfo) return;CFont *pOldFont=pDC->SelectObject(&m_PrinterFont);//设置映射参数及边界pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(m_LogicalPageSize);pDC->SetViewportExt(m_PaperSize);pDC->SetWindowOrg(-LEFT_MARGIN*m_CharSize.cx,0); pDC->SetWindowOrg(0,0);pDC->SelectObject(pOldFont);2 实现打印预览通过以上几个函数就已经可以打印了,要实现打印预览,还要作一些工作。

C# 打印预览

C# 打印预览

本来想用.Net提供的打印预览对话框,可终究不如自己写的用起来方便,比如说添加鼠标和滚轮支持。

在.Net环境下实现打印和预览还是蛮简单的。

需要用到的类是PrintDocument和PrintPreviewControl。

PrintDocument是要打印的文档,PrintPreviewControl是预览所用的容器。

要实现打印,主要用到PrintDocument 提供的三个事件。

1、PrintDocument.BeginPrint:打印开始事件,在此事件里进行打印初始化操作,比如说初始化打印开始的页码,打印数据定位于首行。

2、PrintDocument. PrintPage:打印事件。

一个重要的对象是e.Graphics,它是GDI+的绘画图画,全靠用它来向文档上画内容。

3、PrintDocument .EndPrint:打印结束事件,进行一些事后操作,比如说根据总页数来填充翻页下拉框等。

PrintPreviewControl的使用也比较简单,将PrintPreviewControl.Document赋上一个画好的打印文档,就轻松的实现打印预览了。

PrintPreviewControl.Zoom属性用来控制缩放,要显示75%就赋值0.75,显示200%就赋值2.0。

要实现单页双页视图,用PrintPreviewControl.Rows 和PrintPreviewControl.Columns,如实现双页,则Rows=1, Columns=2。

PrintPreviewControl. StartPage用来控制翻页,即显示的当前页。

关于鼠标滚轮和鼠标拖动支持,点这里。

TOC-v操作说明

TOC-v操作说明

TOC-V CPN(H)一)菜单说明File文件: New新的,Open打开,Close关闭,Save保存,Save As另存为,ASCII Export ASC输出,Print 打印,Print Preview打印预览,Print Setup打印设置,Page Setup页面设置,Exit退出.Edit编辑: Undo不做, Cut剪切, Copy复制, Paste粘贴, Replace替换,Find找,Exclude去除,Recalculate 重新计算, Delete Data删除数据, input输入.View显示: Calibration Curve标准曲线, Method方法, Sample Window样品测量, Properties属性, Toolbar工具栏, Status Bar状态栏,Show all control bars显示所有控制栏.Insert 插入: Auto Generate自动产生, Calibration Curve标准曲线, Sample样品, Control控制.Instrument仪器: Background Monitor背景临视, Connect连接, Standby等待, Start开始, Stop停止,Maintenance维护, Properties属性.Tools工具: Control Charts控制图表, Method Validation方法确认, Administration管理,History Database原始数据块.Signatures署名: Sign sample table署名样品表, Verify sample table核实样品表,Sign File署名文件, Verify File核实文件, Export Key输出键.Options选择: General Information一般信息, Default Measurement Parameters默认测量参数,Display settings显示设置, Directories目录.Window窗口: Cascade系列, Tile题目, Arrange Icons范围项.Help 帮助.二)操作1.准备工作1)开启载气钢瓶阀门,调节减压阀至0.4—0.6Mpa压力2)打开主机前右下方的电源开关.3)打开计算机电源,进入TOC-control V系统,双击Sample Table Editor, 输入密码,如果安装时没有使用密码可以直接按OK进入。

第8章 打印和打印预览

第8章  打印和打印预览

8.2
用MFC编程实现打印 MFC编程实现打印
MFC对打印和打印预览等进行了包装。在MFC支持的 对打印和打印预览等进行了包装。 对打印和打印预览等进行了包装 支持的 应用程序中, 应用程序中,OnDraw()函数负责显示屏和其他设备进行绘 函数负责显示屏和其他设备进行绘 制或者打印。本节简要的介绍利用MFC实现打印编程。 实现打印编程。 制或者打印。本节简要的介绍利用 实现打印编程
8.1.2 文本和字符
Win32 API提供的函数可以控制文本的特征,其中包括 提供的函数可以控制文本的特征, 提供的函数可以控制文本的特征 文本放置位置、字符之间的距离、文本颜色、 文本放置位置、字符之间的距离、文本颜色、文本之后的背 景色等。字体都有不同的大小特征, 景色等。字体都有不同的大小特征,可以用 GetTextMetrics()函数决定。TrueType字体还包含关于诸如 函数决定。 函数决定 字体还包含关于诸如 紧缩对”之类特征的信息。紧缩对是一对字符, “紧缩对”之类特征的信息。紧缩对是一对字符,当被一起 放在字符串中时,间距会被调整到具有最佳外观。 放在字符串中时,间距会被调整到具有最佳外观。 GetKerningPairs()函数可以检索这些字符组合。TrueType 函数可以检索这些字符组合。 函数可以检索这些字符组合 字体还有不能适用于其它字体的特征。 字体还有不能适用于其它字体的特征。函数 GetOutlineTextMetrics() 检索这些特征。 检索这些特征。
CPrintInfo类 8.2.3 CPrintInfo类
CPrintInfo类存储着关于打印或打印预览作业的的信息。 类存储着关于打印或打印预览作业的的信息。 类存储着关于打印或打印预览作业的的信息 框架在每次Print或Print Preview命令被选择时创建一个 框架在每次 或 命令被选择时创建一个 CPrintInfo对象,并当命令完成时销毁它。CPrintInfo包含着 对象, 对象 并当命令完成时销毁它。 包含着 关于整体打印作业的信息,也包含着打印作业的当前状态。 关于整体打印作业的信息,也包含着打印作业的当前状态。 一些信息存储在相关的CPrintDialog对象中,这个对象包 一些信息存储在相关的 对象中, 对象中 含着用户在Print对话框中输入的信息。打印期间,CPrintInfo 对话框中输入的信息。 含着用户在 对话框中输入的信息 打印期间, 对象在框架和视图之间传递,并用于两者之间的信息交换。 对象在框架和视图之间传递,并用于两者之间的信息交换。文 档的长度是直到打印后才知道的。在这种情况下, 档的长度是直到打印后才知道的。在这种情况下,视图类每次 在页被打印后测试文档的结尾。当到达结尾时, 在页被打印后测试文档的结尾。当到达结尾时,视图类把 CPrintInfo的m_bContinuePrinting成员设置为 的 成员设置为FALSE;通知 ; 成员设置为 框架停止打印循环。 框架停止打印循环。

全面解析C#实现打印

全面解析C#实现打印

全面解析C#实现打印功能在Windows应用程序中C#实现打印功能对于文档编程是一项非常重要的功能,在以前是非常复杂的工作,Microsoft .net Framework的打印功能都以组件的方式提供,但是这几个组件的使用还是很复杂的,下面我们一一介绍:C#实现打印功能操作通常包括以下四个功能。

1、打印设置设置打印机的一些参数比如更改打印机驱动程序等。

2、页面设置设置页面大小纸张类型等。

3、打印预览类似于word中的打印预览。

4、打印。

下面就向你具体介绍操作的步骤。

实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所有的与打印有关的事件和方法这个类包括以下几个属性、事件和方法1、PrinterSettings 属性存放打印机的设置信息这个属性不需要程序员设置因为它是由打印对话框获取的2、PrintCountroller 属性控制打印过程3、DefaultPageSettings 属性存放页面设置信息打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的4、DocumentName 属性指定文档名称,出现在打印机状态窗口中1、BeginPrint事件在打印之前发出2、PrintPage事件每打印一页是发出,事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息C#实现打印功能PrintPageEventArgs参数有很多重要的属性1、Cancel 取消打印2、Graphics 页面的绘图对象3、HasMorePages 是否还有要打印的页面Print 方法该方法没有参数调用它将按照当前设置开始打印若实现打印功能首先构造PrintDocument对象添加打印事件1.PrintDocument printDocument;2.private void InitializeComponent()3.{4....5.printDocument=new PrintDocument();6.printDocument.PrintPage +=7.8.new PrintPageEventHandler (this.printDocument_PrintPage);9....10.}C#实现打印功能之打印事件功能打印和绘图类似都是调用Graphics 类的方法进行画图不同的是一个在显示器上一个在打印纸上并且打印要进行一些复杂的计算如换行分页等。

在Visual C++ 中调读取和控制Excel详细教程

在Visual C++ 中调读取和控制Excel详细教程

在Visual C++ 中调用Excel 2000程蓬在开发软件时,经常要将数据输出到Excel 2000中,在Excel 2000中对该数据进行进一步地格式化处理或进行计算处理。

在Visual Basic中处理起来较简单,Excel 2000的VB编程帮助中有较为详细的介绍。

在Visual C++中如何进行处理了?利用Excel 2000的ActiveX Automate功能,处理起来同VB中类似。

但要注意以下几点:对于对象的属性值的读取或赋值,需要用GetProperty()或SetProperty(NewValue)函数,不能象VB 中直接通过属性名称取值或赋值。

例如:Worksheet.GetCount(), Worksheet.SetName(“Sheet1”)。

对集合对象中的成员对象的引用,必须使用集合对象的GetItem()函数。

例如:Worksheets.GetItem(ColeVariant((long)1))或Worksheets.GetItem(ColeVariant(“Sheet1”))取得第一个工作表。

在COM接口中,时常用到V ariant,BSTR,SafeArray数据类型。

Variant数据类型是一个联合,可表示几乎所有的类型的数据,具体用法见MSDN中的相关介绍,类_variant_t是对V ARIANT数据类型的封装。

在Excel 2000的VB编程帮助中,如果提到某函数或属性需要一个值,该值的数据类型通常是Variant,在封装Excel 2000对象的类定义中,说明了具体需要的数据类型。

BSTR是一个包括了字符串和字符串长度的数据结构,类_bstr_t是对BSTR数据类型的封装。

在Excel 2000的VB编程帮助中提到的字符串通常指BSTR。

具体函数参数或属性的数据类型,见封装该对象的类的定义。

SafeArray是一个包括数组和数组边界的结构,数组边界外的内容不允许访问。

C#教程之打印和打印预览

C#教程之打印和打印预览

C#教程之打印和打印预览最近研究⼀了⼀下关于PDF打印和打印预览的功能,在此⼩⼩的总结记录⼀下学习过程。

实现打印和打印预览的⽅法,⼀般要实现如下的菜单项:打印、打印预览、页⾯设置、PrintDocument类PrintDocument组件是⽤于完成打印的类,其常⽤的属性、⽅法事件如下:属性DocumentName:字符串类型,记录打印⽂档时显⽰的⽂档名(例如,在打印状态对话框或打印机队列中显⽰),即⽤户填写⽣成pdf⽂件名时的默认值为DocumentName ⽅法Print:开始⽂档的打印。

事件BeginPrint:在调⽤Print⽅法后,在打印⽂档的第⼀页之前发⽣。

事件PrintPage:需要打印新的⼀页时发⽣。

事件EndPrint:在⽂档的最后⼀页打印后发⽣。

若要打印,⾸先创建PrintDocument组建的对象,然后使⽤页⾯上设置对话框PageSetupDialog设置页⾯打印⽅式,这些设置作为打印页的默认设置、使⽤打印对话框PrintDialog设置对⽂档进⾏打印的打印机的参数。

在打开两个对话框前,⾸先设置对话框的属性Document为指定的PrintDocument类对象,修改的设置将保存到PrintDocument组件对象中。

第三步是调⽤PrintDocument.Print⽅法来实际打印⽂档,调⽤该⽅法后,引发下列事件:BeginPrint、PrintPage、EndPrint。

其中每打印⼀页都引发PrintPage事件,打印多页,要多次引发PrintPage事件。

完成⼀次打印,可以引发⼀个或多个PrintPage事件。

///<summary>///打印纸设置///</summary>///<param name="sender"></param>///<param name="e"></param>protected void FileMenuItem_PageSet_Click(object sender, EventArgs e){PageSetupDialog pageSetupDialog = new PageSetupDialog();pageSetupDialog.Document = printDocument;pageSetupDialog.ShowDialog();}///<summary>///打印机设置///</summary>///<param name="sender"></param>///<param name="e"></param>protected void FileMenuItem_PrintSet_Click(object sender, EventArgs e){PrintDialog printDialog = new PrintDialog();printDialog.Document = printDocument;printDialog.ShowDialog();}///<summary>///预览功能///</summary>///<param name="sender"></param>///<param name="e"></param>protected void FileMenuItem_PrintView_Click(object sender, EventArgs e){PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog {Document = printDocument};lineReader = new StreamReader(@"f:\新建⽂本⽂档.txt");try{ // 脚本学堂 printPreviewDialog.ShowDialog();}catch (Exception excep){MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);}}///<summary>///打印功能///</summary>///<param name="sender"></param>///<param name="e"></param>protected void FileMenuItem_Print_Click(object sender, EventArgs e){PrintDialog printDialog = new PrintDialog {Document = printDocument};lineReader = new StreamReader(@"f:\新建⽂本⽂档.txt");if (printDialog.ShowDialog() == DialogResult.OK){try{printDocument.Print();}catch (Exception excep){MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);printDocument.PrintController.OnEndPrint(printDocument, new PrintEventArgs());}}}程序员应为这3个事件编写事件处理函数。

C#中打印、预览、打印机设置和打印属性的方法

C#中打印、预览、打印机设置和打印属性的方法

C#中打印、预览、打印机设置和打印属性的⽅法 private void Form1_Load(object sender, System.EventArgs e){//获取或设置⼀个值,该值指⽰是否发送到⽂件或端⼝printDocument1.PrinterSettings.PrintToFile = true;//设置打印时横向还是纵向ndscape = true;}private void fileOpenMenuItem_Click(object sender, System.EventArgs e){OpenFile();}private void OpenFile(){openFileDialog1.Filter = "Text Files (*.txt)|*.txt";//打开⽂本的类型//获取⽂件对话框的初始⽬录(StartupPath)获得bin⽂件下的⽂件openFileDialog1.InitialDirectory = System.Windows.Forms.Application.StartupPath;DialogResult userResponse = openFileDialog1.ShowDialog();//MessageBox.Show(userResponse.ToString());if (userResponse==DialogResult.OK){filePath = openFileDialog1.FileName.ToString();//转换⽂件路径}}private void MyPrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)//充分利⽤e{int topMargin = printDocument1.DefaultPageSettings.Margins.Top;//上边距int leftMargin = printDocument1.DefaultPageSettings.Margins.Left;//左边距float linesPerPage = 0;//页⾯⾏号float verticalPosition = 0;//绘制字符串的纵向位置float horizontalPosition=leftMargin;//左边距string textLine = null;//⾏字符串currentLine = 0;//⾏计数器// float Xline=0;//int line=0;// Calculate the number of lines per page.linesPerPage = e.MarginBounds.Height / myFont.GetHeight(e.Graphics);// Xline=e.MarginBounds.Width/myFont.GetHeight();// for each text line that will fit on the page, read a new line from the documentwhile (currentLine < linesPerPage ){textLine = streamToPrint.ReadLine();if(textLine == null){break;}// 求出已经打印的范围verticalPosition = topMargin + currentLine * myFont.GetHeight(e.Graphics);// 设置页⾯的属性e.Graphics.DrawString(textLine, myFont, myBrush, horizontalPosition, verticalPosition);// 增加⾏数currentLine ++;}// If more lines of text exist in the file, print another page.if (textLine != null){e.HasMorePages = true;}else{e.HasMorePages = false;}private void printPreviewButton_Click(object sender, System.EventArgs e){try{streamToPrint = new StreamReader(filePath);try{PrintPreview();}finally{streamToPrint.Close();}}catch(Exception ex){MessageBox.Show(ex.Message);}}private void runtimeDialogButton_Click(object sender, System.EventArgs e){try{streamToPrint = new StreamReader(filePath);try{RuntimeDialog();}finally{streamToPrint.Close();}}catch(Exception ex){MessageBox.Show(ex.Message);}}private void printPreviewControlButton_Click(object sender, System.EventArgs e) {try{streamToPrint = new StreamReader(filePath);try{PrintPreviewControl();}finally{streamToPrint.Close();}}catch(Exception ex){MessageBox.Show(ex.Message);}}private void RuntimeDialog(){PrintPreviewDialog pPDlg;pPDlg = new PrintPreviewDialog();pPDlg.Document = pDoc;pPDlg.WindowState = FormWindowState.Maximized;pPDlg.PrintPreviewControl.Columns = 2;pPDlg.ShowDialog();pPDlg.Dispose();private void PrintPreviewControl(){Form formPreview = new Form();PrintPreviewControl previewControl = new PrintPreviewControl();previewControl.Document = printDocument1;previewControl.StartPage = 2;formPreview.WindowState = FormWindowState.Maximized;formPreview.Controls.Add(previewControl);formPreview.Controls[0].Dock = DockStyle.Fill;formPreview.ShowDialog();formPreview.Dispose();}private void PrintPreview(){//设置页⾯的预览的页码//设置显⽰页⾯显⽰的⼤⼩(也就是原页⾯的倍数)printPreviewDialog1.PrintPreviewControl.StartPage = 0;printPreviewDialog1.PrintPreviewControl.Zoom =1.0;//设置或返回窗⼝状态,即该窗⼝是最⼩化、正常⼤⼩还是其他状态。

C#实现打印与打印预览功能的思路及代码

C#实现打印与打印预览功能的思路及代码

C#实现打印与打印预览功能的思路及代码在windows应⽤程序中⽂档的打印是⼀项⾮常重要的功能,在以前⼀直是⼀个⾮常复杂的⼯作,Microsoft .Net Framework的打印功能都以组件的⽅式提供,为程序员提供了很⼤的⽅便,但是这⼏个组件的使⽤还是很复杂的,有必要解释⼀下。

打印操作通常包括以下四个功能:1 打印设置设置打印机的⼀些参数,⽐如更改打印机驱动程序等;2 页⾯设置设置页⾯⼤⼩纸张类型等3 打印预览类似于word中的打印预览4 打印实现打印功能的核⼼是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页⾯设置以及所有的与打印有关的事件和⽅法这个类包括以下⼏个属性,事件和⽅法1、PrinterSettings 属性存放打印机的设置信息,这个属性不需要程序员设置,因为它是由打印对话框获取的.2、PrintCountroller 属性控制打印过程3、DefaultPageSettings 属性存放页⾯设置信息,打印纸⼤⼩⽅向等,也不需要程序员设置,因为它是由页⾯设置对话框获取的.4、DocumentName 属性指定⽂档名称,出现在打印机状态窗⼝中1。

BeginPrint事件在打印之前发出2. PrintPage事件每打印⼀页是发出,事件接受⼀个PrintPageEventArgs参数该参数封装了打印相关的信息PrintPageEventArgs参数有很多重要的属性1 Cancel 取消打印2 Graphics 页⾯的绘图对象3 HasMorePages 是否还有要打印的页⾯Print⽅法:该⽅法没有参数调⽤它将按照当前设置开始打印.若实现打印功能⾸先构造PrintDocument对象添加打印事件复制代码代码如下:PrintDocument printDocument;private void InitializeComponent(){...// 这⾥的printDocument对象可以通过将PrintDocument控件拖放到窗体上来实现,注意要设置该控件的PrintPage事件。

vc设置打印机模式并预览打印

vc设置打印机模式并预览打印

vc设置打印机模式并预览打印调用打印属性对话框:if(::OpenPrinter("Adobe PDF", &hPrint, NULL)){::PrinterProperties(m_hWnd, hPrint);::ClosePrinter(hPrint);}注:通过EnumPrinters可以枚举全部的本地、网络打印机信息,通过指定以上的方法,可以打开打印机属性对话框,建议通过以上方法修改打印机固定属性,比较安全。

枚举打印机需要调用两次EnumPrinters函数,第一次的到结构体的大小,第二次得到打印机列表DWORD dwNeeded, dwReturn;// 得到结构大小BOOL bl = ::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, NULL, 0,&dwNeeded, &dwReturn);// 得到打印机设备列表PRINTER_INFO_4* p4;p4 = (PRINTER_INFO_4*)malloc(dwNeeded);::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, (PBYTE)p4, dwNeeded,&dwNeeded, &dwReturn);for(int i=0;i< div> < dwNeeded;i++){TRACE("This is printer name : %s\r\n", p4[i].pPrinterName);}// 注意以上代码,NT以上系统支持,98不支持最简单的一段打印程序流程:1、得到默认打印机名称(如果你不打算更改打印机的话,就不需要保存该选项)2、保存默认打印机名称3、设定新的默认打印机4、取得默认打印机的选项5、修改属性,如纸张选择,横纵等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在VC对话框中实现打印和打印预览(附实现步骤)时间:2008-01-27作者:佚名在一般的软件开发中打印和打印预览是经常要用到的功能,对于VC6.0中的文档/视图(Doc/View)框架,可以很方便的使用缺省的打印和打印预览。

但是,如果应用程序是基于对话框的就没有办法利用这种便利。

而很多情况下,基于对话框的程序也需要打印和打印预览功能。

那该怎么办呢?这正是本文将要解决的问题。

1实现打印在对话框应用程序中不具备MFC的视和框架交互,要想实现打印和打印预览必须直接获取打印机的设备环境句柄,这时可以设置CPringDialog类中的构造函数的参数,获取打印机的设备环境句柄。

利用这个句柄,转换为指针,则按打印流程实现打印任务。

(1)从CFrameWnd类派生出主窗口类CMyFrameWnd加入项目,这个类将作为控制类来实现程序的打印和打印预。

(2)在CMyFrameWnd中加入打印和打印预览相关的函数,为了方便起见,名字和CView视图类中缺省的打印和打印预览虚函数名相同。

但这些函数是以成员函数的形式加入的,而不是重载。

这里主要介绍Print和OnPrint函数。

Print函数是打印控制函数,由它来弹出打印对话框,取得用户设置信息,如打印机、纸张大小等。

还有建立一个打印机DC和设置DOCINFO 结构,该结构包含输入输出文件名及其它一些信息,StartDoc函数要该结构作参数。

还要设置打印区域,调用打印函数等void CMyFrameWnd::Print(){CDC dc;CPrintDialog printDlg(FALSE);if (printDlg.DoModal() != IDOK)//弹出打印对话框,取得用户设置参数return;dc.Attach(printDlg.GetPrinterDC());//绑定一个打印机DC到CDCdc.m_bPrinting=TRUE;DOCINFO di; //初始化打印机的DOCINFOmemset(&di,0,sizeof (DOCINFO));di.cbSize=sizeof (DOCINFO);BOOL bPrintingOK=dc.StartDoc(&di); //开始一个打印任务CPrintInfo Info;Info.m_rectDraw.SetRect(0,0,dc.GetDeviceCaps(HORZRES), c.GetDeviceCaps(VERTRES));//设置打印区域大小OnBeginPrinting(&dc,&Info); //打印初始化for (UINT page = Info. GetMinPage ( ); page < = Info. GetMaxPage() && bPrintingOK; page++){dc.StartPage(); //开始一个新的打印页Info.m_nCurPage=page;OnPrint(&dc,&Info); //打印bPrintingOK=(dc.EndPage() > 0); //打印页结束}OnEndPrinting(&dc,&Info); //打印完成后释放资源if (bPrintingOK)dc.EndDoc(); //一个打印任务结束elsedc.AbortDoc(); //终止打印任务dc.Detach(); //释放打印机DC}OnPrint函数主要设置映射参数,调用对话框的绘图函数等功能,具体如下: void CMyFrameWnd::OnPrint(CDC *pDC,CPrintInfo *pInfo)//{if (!pDC || !pInfo) return;CFont *pOldFont=pDC->SelectObject(&m_PrinterFont);//设置映射参数及边界pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(m_LogicalPageSize);pDC->SetViewportExt(m_PaperSize);pDC->SetWindowOrg(-LEFT_MARGIN*m_CharSize.cx,0);pDC->SetWindowOrg(0,0);pDC->SelectObject(pOldFont);}2实现打印预览通过以上几个函数就已经可以打印了,要实现打印预览,还要作一些工作。

因为打印预览函数的执行都依赖于CView和CFrameWnd框架,所以,我们建立临时的框架类和视图类,然后调用这个临时视图类的缺省函数OnFilePrint和OnFilePrintPreview。

(1)从CView类派生出CMyView类加入项目。

并在CMyView类中重载相关的打印和打印预览函数。

这个类主要用来传递OnBeginPrinting,OnPrint,OnEndPrinting等相关函数。

(2 )在控制类的PrintPreview函数中用一个CsingleDocTemplate对象创建框架和视图窗口,其中视图类CMyView并不显示,因为它马上就被预览视图(preview view)所掩盖。

m_pMainWnd改为指向新的CFrameWnd,这样预览类就可以用它作为主框架。

m_pMainWnd的初始值被保存下来,当预览结束时,要将m_pMainWnd恢复到其初始值。

当然,要在控制类包含头文件MyView.h。

具体程序如下:void CMyFrameWnd::PrintPreview(){if (m_bPrintPreview) //预览标志符{AfxGetApp()->m_pMainWnd->SetFocus();return;}CFrameWnd* pOldFrame=(CFrameWnd*)AfxGetThread()->m_pMainWnd;pOldFrame->ShowWindow(SW_HIDE);// m_pMainWnd初始值被保存,原来框架被隐藏if (!m_pTemplate){m_pTemplate = new CSingleDocTemplate ( IDR_MENU,NULL, RUNTIME_CLASS(CFrameWnd), RUNTIME_CLASS(CMyView)); //建立CSingleDocTemplate对象AfxGetApp()->AddDocTemplate(m_pTemplate);}CFrameWnd * pFrameWnd = m_pTemplate - >CreateNewFrame(NULL,NULL );//建立临时框架m_bPrintPreview=TRUE; //打印预览m_pTemplate -> InitialUpdateFrame ( pFrameWnd, NULL,FALSE);CMyView * pView = ( CMyView * ) pFrameWnd ->GetActiveView();pView->m_pCtrlFrame=this;pView->m_pOldFrame=pOldFrame;AfxGetApp()->m_pMainWnd=pFrameWnd;pFrameWnd->ShowWindow(SW_SHOWMAXIMIZED);//显示临时框架pView->OnFilePrintPreview();//调用CView缺省的打印预览}现在,我们已经可以看到预览窗口了。

但是有个小问题,工具栏上的按钮不能自动更新。

这是因为对话框应用程序没有OnIdle()函数,而在SDI或MDI应用程序中都是通过这个函数来发送WM_IDLEUPDATECMDUI消息以更新工具栏。

所以我们要自己发送这个消息。

首先,我们要包含AfxPriv.h以让程序识别WM_IDLEUPDATECMDUI消息。

就像这样:BOOL CSzyDlg::ContinueModal(){if (m_Grid.m_bPrintPreview)AfxGetApp()->m_pMainWnd->SendMessageToDescendants(WM_IDLEUPDATECMDUI,(WPARAM)TRUE,0,TRUE,TRUE);return CDialog::ContinueModal();}基于对话框的应用程序没有包含打印预览的源文件,所以要将afxprint.rc添加到工程中。

先用记事本打开资源文件,在3 TEXTINCLUDE部分找到#include afxres.rc,在它下面加入:"#include ""afxprint.rc"" // printing/print preview resources\ r\ n"再到资源文件末尾,找到#include afxres.rc,在其下加入:#include afxprint.rc // printing/print preview resources最后,再为打印按钮(也就是ID_FILE_PRINT消息)在对话框类中增加一个响应函数:BEGIN_MESSAGE_MAP(CMyDlg,CDialog)//{{AFX_MSG_MAP(CMyDlg)…//}}AFX_MSG_MAPON_COMMAND(ID_FILE_PRINT,OnFilePrint) //消息响应函数END_MESSAGE_MAP()3结语对话框应用程序简洁、能较好的和用户交换信息,所以应用很广泛。

在这个基础上实现打印和打印预览就能更好的满足用户的需要,有一定的实用价值。

要想实现打印和打印预览,最关键的部分就是根据程序的具体要求,想法设法得到其设备环境句柄,然后,再按打印和打印预览的流程,实现具体的打印和打印预览任务。

我们在开发的“离心泵性能测试系统”中,按上面的方法成功的实现了打印和打印预览。

有兴趣的读者还可以根据自己的需要在此基础实现自己想要的打印和打印预览功能。

相关文档
最新文档