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);
}
当我看着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
整个PrintDialog是平台特定的,Mac版本(在不同的jar)是**完全**不同。 –