2014-03-27 38 views
0

我想创建一个自定义的SWT PrintDialog。但似乎不可能。SWT PrintDialog驱动程序首选项/自定义printdialog

在SWT PrintDialog中,可以单击“首选项”以打开本机打印机驱动程序首选项对话框。是否可以在不使用org.eclipse.swt.printing.PrintDialog的情况下打开“本机打印机驱动程序首选项对话框”并阅读驱动程序首选项(PrinterData)?

回答

1

PrintDialog是非常具体的平台。例如,Mac版本没有“首选项”选项。该类包含许多与特定平台接口的未公开的低级代码。可以在你自己的类中使用低级代码,但是这不被支持,你需要一些平台API的经验。

只是为了说明的差别,这里是在Windows上open方法的前几行:

public PrinterData open() { 
    /* Get the owner HWND for the dialog */ 
    Control parent = getParent(); 
    int style = getStyle(); 
    long /*int*/ hwndOwner = parent.handle; 
    long /*int*/ hwndParent = parent.handle; 

和Mac OS X代码:

public PrinterData open() { 
    PrinterData data = null; 
    NSPrintPanel panel = NSPrintPanel.printPanel(); 
    NSPrintInfo printInfo = new NSPrintInfo(NSPrintInfo.sharedPrintInfo().copy()); 
    if (printerData.duplex != SWT.DEFAULT) { 
     long /*int*/ settings = printInfo.PMPrintSettings(); 

和Linux:

public PrinterData open() { 
    if (OS.GTK_VERSION < OS.VERSION (2, 10, 0)) { 
     return Printer.getDefaultPrinterData(); 
    } else { 
     byte [] titleBytes = Converter.wcsToMbcs (null, getText(), true); 
     long /*int*/ topHandle = getParent().handle; 
     while (topHandle != 0 && !OS.GTK_IS_WINDOW(topHandle)) { 
      topHandle = OS.gtk_widget_get_parent(topHandle); 
     } 
+0

当我看着http://www.docjar.com/html/ap i/org/eclipse/swt/printing/PrintDialog.java.html第394-408行似乎只是从实际驱动程序设置中检索到的OS.DM_ORIENTATION(横向,纵向),这是跨平台的,但可以手动设置。如果我正确理解“PRINTDLG pd = new PRINTDLG();” 265行是PrintDialog的平台特定部分。好吧,那么我将不得不知道在每个平台上寻找什么以保持我的代码跨平台。谢谢你的回答。我会尝试其他的东西:) – user3417686

+0

整个PrintDialog是平台特定的,Mac版本(在不同的jar)是**完全**不同。 –