8.5 打印对话框
你可以使用的打印对话框包括 wxPageSetupDialog 和 wxPrintDialog 以用来打印文档. 不过,如果你使用 wxWidgets 的打印框架(包括 wxPrintout, wxPrinter 以及其它一些类) 的话,你的代码中很少需要显式的调用这些对话框.更多关于打印的细节请参考第 5 章, "绘画和打印."
wxPageSetupDialog
wxPageSetupDialog 包含一些用来设置纸张大小(A4 或者信纸大小等),打印方向(横向或者纵向),以毫米为单位的边框大小等控件还包括一个用来调用另外一个更详细打印设置对话框的按钮。
下图演示了 wxPageSetupDialog 对话框在 windows 系统上的样子:
而下面的这个图则是 wxWidgets 自己实现的使用 GTK+的通用的打印设置对话框:
如果使用了 Gnome 的打印库,则 GTK 版本中的打印设置对话框将使用 Gnome 的原生对话框,如下图所示:
Mac 版本的打印对话设置对话框图下图所示:
要创建一个打印设置对话框,你需要传递的参数包括一个父窗口和一个指向 wxPageSetupDialogData 对象的指针,后者用于指定以及从对话框获取打印设置相关的数据,你可以以局部变量或者全局指针的方式创建打印设置对话框.构造函数中的打印设置数据将会被拷贝到打印设置对话框的内部数据中去,而 GetPageSetupData 函数可以用来获取一个打印设置对话框内部数据的引用。
wxPageSetupData 成员函数
Ok 函数在其内部数据有效的情况下返回 True,在 windows 平台上,如果没有设置默认的打印机,这个函数可能返回 False,在其它平台上,这个函数总是返回 True。
SetMarginTopLeft 函数使用 wxPoint 类型的参数以毫米为单位指定打印页面的左边距和上边距. GetMarginTopLeft 则用来获取这两个边距。
SetMarginBottomRight 函数使用 wxPoint 类型的参数以毫米为单位设置打印页面的右边距和下边距. GetMarginBottomRight 则用来获取这两个边距。
SetPaperId 使用标识符来代替具体的大小来设置页面大小. 参考这个函数在手册中的描述来获取相关的标识符. GetPaperId 则用来获取当前设置的标识符。
SetPaperSize 采用一个 wxSize 参数来设置以毫米为单位的页面大小. GetPaperSize 则用来获取对应的设置。
EnableMargins 允许或者禁用对话框上的边界控制控件(仅适用于 Windows). GetEnableMargins 用来获取这个设置的值。
EnableOrientation 用来允许或者禁止对话框上的打印方向控制控件(仅适用于 Windows). GetEnableOrientation 用来获取这个设置的值。
EnablePaper 用来允许或者禁止对话框上选择纸张大小的控件(仅适用于 Windows). GetEnablePaper 用来获取这个设置的值。
EnablePrinter 用来允许或者禁止打印机按钮,这个按钮用来调用另外一个打印设置对话框. GetEnablePrinter 用来获取这个设置的值。
wxPageSetupDialog 使用举例
#include "wx/printdlg.h"
void MyFrame::OnPageSetup(wxCommandEvent& event)
{
wxPageSetupDialog pageSetupDialog(this, & m_pageSetupData);
if (pageSetupDialog.ShowModal() == wxID_OK)
m_pageSetupData = pageSetupDialog.GetPageSetupData();
}
wxPrintDialog
这个对话框用来显式打印及打印设置的标准对话框,当这个对话框关闭的时候你可以从中获得一个 wxPrinterDC 对象的实例。
下图演示了这个对话框在 windows 系统上的外观:
下面的两幅图分别演示了 GTK 版本中没有使用 Gnome 打印库和使用了 GNome 打印库两种情况下对应的这个对话框的样子:
下图则演示了 Mac OSX 上对应的样子,从图中可以看到,Mac 在标准对话框中提供了预览以及存为 PDF 文件的选项,你可以直接使用这个预览功能。
要创建一个 wxPrintDialog 对象,你需要提供的参数包括一个父窗口指针,一个 wxPrintDialogData 对象的指针,后者的内容将被拷贝给打印对话框内部的对象.如果你希望显示一个打印设置对话框来代替打印对话框,你可以以 True 为参数调用 wxPrintDialogData:: SetSetupDialog 函数,然后再将其传递给 wxPrintDialog 的构造函数.按照微软的说法,虽然打印设置对话框已经被 wxPageSetupDialog 所取代,但是一些老的程序可能还在使用以前的标准,因此,这样作可以保证兼容性。
打印对话框被成功关闭的时候,你可以使用 GetPrintDialogData 函数来获取一个 wxPrintDialogData 的引用。
调用对话框的 GetPrintDC 函数来获取一个基于用户选项的打印设备上下文,如果这个函数的返回值不为空,应用程序应该自己释放这个被返回的对象。
Ok 函数在打印对话框内部数据有效的时候返回 True,在 windows 平台上,如果没有设置默认的打印机,则 Ok 返回 False,在其它平台上,这个函数总是返回 True。
wxPrintDialogData 的成员函数
EnableHelp 允许或者禁止对话框上的帮助按钮. GetEnableHelp 用来获取对应的设置。
EnablePageNumbers 允许或者禁止页码设置控件, GetEnablePageNumbers 用来获取对应的设置。
EnablePrintToFile 允许或者禁止打印到文件按钮. GetEnablePrintToFile 用来获取对应的设置。
EnableSelection 允许或者禁止用于给用户选择打印范围的单选框. GetEnableSelection 用来获取这个设置的值。
SetCollate 用来设置 Collate 复选框的值为 True 或者 false. GetCollate 来获取这个复选框的值。
SetFromPage 和 SetToPage 用来设置打印的起始页和终至页. 使用 GetFromPage 和 GetToPage 来获取相应的值。
SetMinPage 和 SetMaxPage 用来设置可以打印的最小页数和最大页数. GetMinPage 和 GetMaxPage 则用来获取相应的值。
SetNoCopies 用来设置默认打印份数. GetNoCopies 用来获取当前设置的打印份数。
SetPrintToFile 设置打印到文件的复选框的值. GetPrintToFile 则用来获取这个值的当前设定。
SetSelection 用来设置打印范围单选框选项. GetSelection 则用来返回这个选项的值。
SetSetupDialog 用来指示显示打印设置对话框还是打印对话框. GetSetupDialog 来获取这个设置。
SetPrintData 设置内部的 wxPrintData 对象. GetPrintData 则用来返回内部的 wxPrintData 对象的一个引用。
wxPrintDialog 使用举例
下面的例子演示了怎样显示一个打印对话框以便获取对应的打印上下文:
#include "wx/printdlg.h"
void MyFrame::OnPrint(wxCommandEvent& event)
{
wxPrintDialogData dialogData;
dialogData.SetFromPage(0);
dialogData.SetToPage(10);
wxPrintDialog printDialog(this, & m_dialogData);
if (printDialog.ShowModal() == wxID_OK)
{
// 在调用 GetPrintDC() 以后,应用程序
// 负责管理这个设备上下文
wxDC* dc = printDialog.GetPrintDC();
// 在这个设备上下文上绘画
...
// 然后释放它
delete dc;
}
}
不过,通常你不需要自己直接调用打印对话框 .你应该使用 wxWidgets 提供的高层打印框架(参考第 5 章).在你调用 wxPrinter::Print 函数的时候将会自动显示打印对话框。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论