我想在 Windows10 上打印前显示模型预览。我的对话窗口:
protected Control createDialogArea( Composite parent )
{
mvSelectionDisabled = modelviewsDisabled();
setTitle( DialogTitle );
getShell().setText( DialogHeader );
parent.setLayout( new GridLayout(1, false) );
SashForm intParent = new SashForm( parent, SWT.NONE );
intParent.setLayout( new GridLayout(2, false) );
GridData intData = new GridData( SWT.FILL, SWT.FILL, true, true );
intData.horizontalIndent = 0;
intData.verticalIndent = 0;
intParent.setLayoutData( intData );
GridData gridData = new GridData( GridData.FILL, GridData.FILL, true, true );
tabFolder = new TabFolder( intParent, SWT.TOP );
tabFolder.setLayoutData( gridData );
if( !tabHtmlOnly ) {
tabFolder.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
// some code
refreshPreview( );
// some code
}
} );
}
Composite previewComp = new Composite( intParent, SWT.NONE );
previewComp.setLayout( new GridLayout( ) );
GridData previewData = new GridData( SWT.FILL, SWT.FILL, true, true );
previewData.horizontalIndent = -5;
previewData.verticalIndent = -5;
previewComp.setLayoutData( previewData );
ToolBar previewButtonsToolbar = new ToolBar( previewComp, SWT.FLAT | SWT.HORIZONTAL );
previewButtonsToolbar.setLayoutData( new GridData( SWT.BEGINNING, SWT.TOP, true, false ) );
// some code
tabFolder.pack();
//some code
preview = new PrintPreview( previewComp, SWT.NONE );
GridData previewLayoutData = new GridData( GridData.FILL, GridData.FILL, true, true );
previewLayoutData.widthHint = 450;
previewLayoutData.heightHint = 600;
preview.setLayoutData( previewLayoutData );
// some code
refreshPreview( true );
setMessage( DialogMessage, IMessageProvider.INFORMATION );
return parent;
}
虽然监视器缩放设置为 150%,
org.eclipse.swt.internal.DPIUtil.getDeviceZoom()
返回 100
并且一切正常。但如果缩放设置为 175% 或更高,org.eclipse.swt.graphics.GC.drawImage(Image, int, int, int, int, int, int, int, int)
抛出 SWT.ERROR_INVALID_ARGUMENT
。如果设备缩放 = 200,则存在条件 int errX = src.x + src.width - b.width;
并且 src.width
始终是 b.width
的两倍。
我真的不知道该如何处理。感谢您的任何想法!
绘图图标效果很好,请参阅堆栈:
org.eclipse.swt.graphics.GC.drawImage(org.eclipse.swt.graphics.Image, int, int, int, int, int, int, int, int) line: 934
org.eclipse.swt.widgets.Tree.CDDS_ITEMPOSTPAINT(org.eclipse.swt.internal.win32.NMTVCUSTOMDRAW, long, long) line: 781
org.eclipse.swt.widgets.Tree.wmNotifyChild(org.eclipse.swt.internal.win32.NMHDR, long, long) line: 7372
org.eclipse.swt.widgets.Composite(org.eclipse.swt.widgets.Control).wmNotify(org.eclipse.swt.internal.win32.NMHDR, long, long) line: 5809
org.eclipse.swt.widgets.Composite.wmNotify(org.eclipse.swt.internal.win32.NMHDR, long, long) line: 1989
org.eclipse.swt.widgets.Composite(org.eclipse.swt.widgets.Control).WM_NOTIFY(long, long) line: 5367
org.eclipse.swt.widgets.Composite(org.eclipse.swt.widgets.Control).windowProc(long, int, long, long) line: 4824
org.eclipse.swt.widgets.Display.windowProc(long, long, long, long) line: 4770
org.eclipse.swt.internal.win32.OS.CallWindowProc(long, long, int, long, long) line: not available [native method]
org.eclipse.swt.widgets.Tree.callWindowProc(long, int, long, long) line: 1554
org.eclipse.swt.widgets.Tree(org.eclipse.swt.widgets.Control).windowProc(long, int, long, long) line: 4867
org.eclipse.swt.widgets.Tree.windowProc(long, int, long, long) line: 5962
org.eclipse.swt.widgets.Display.windowProc(long, long, long, long) line: 4770
org.eclipse.swt.internal.win32.OS.DispatchMessage(org.eclipse.swt.internal.win32.MSG) line: not available [native method]
org.eclipse.swt.widgets.Display.readAndDispatch() line: 3545
画图不同,看栈:
org.eclipse.swt.graphics.GC.drawImage(org.eclipse.swt.graphics.Image, int, int, int, int, int, int, int, int) line: 936
org.eclipse.nebula.paperclips.core.ImagePiece.paint(org.eclipse.swt.graphics.GC, int, int) line: 246
org.eclipse.nebula.paperclips.core.ScalePiece.paint(org.eclipse.swt.graphics.GC, int, int) line: 246
org.eclipse.nebula.paperclips.core.CompositePiece.paint(org.eclipse.swt.graphics.GC, int, int) line: 116
org.eclipse.nebula.paperclips.core.CompositePiece.paint(org.eclipse.swt.graphics.GC, int, int) line: 116
org.eclipse.nebula.paperclips.core.CompositePiece.paint(org.eclipse.swt.graphics.GC, int, int) line: 116
org.eclipse.nebula.paperclips.core.CompositePiece.paint(org.eclipse.swt.graphics.GC, int, int) line: 116
org.eclipse.nebula.paperclips.core.CompositePiece.paint(org.eclipse.swt.graphics.GC, int, int) line: 116
org.eclipse.nebula.paperclips.widgets.PrintPreview.paintPage(org.eclipse.swt.widgets.Event, org.eclipse.nebula.paperclips.core.PrintPiece, org.eclipse.swt.graphics.Point) line: 460
org.eclipse.nebula.paperclips.widgets.PrintPreview.paint(org.eclipse.swt.widgets.Event) line: 426
org.eclipse.nebula.paperclips.widgets.PrintPreview.access$0(org.eclipse.nebula.paperclips.widgets.PrintPreview, org.eclipse.swt.widgets.Event) line: 404
org.eclipse.nebula.paperclips.widgets.PrintPreview$1.handleEvent(org.eclipse.swt.widgets.Event) line: 87
org.eclipse.swt.widgets.EventTable.sendEvent(org.eclipse.swt.widgets.Event) line: 89
org.eclipse.swt.widgets.Display.sendEvent(org.eclipse.swt.widgets.EventTable, org.eclipse.swt.widgets.Event) line: 4131
org.eclipse.nebula.paperclips.widgets.PrintPreview(org.eclipse.swt.widgets.Widget).sendEvent(org.eclipse.swt.widgets.Event) line: 1055
org.eclipse.nebula.paperclips.widgets.PrintPreview(org.eclipse.swt.widgets.Widget).sendEvent(int, org.eclipse.swt.widgets.Event, boolean) line: 1079
org.eclipse.nebula.paperclips.widgets.PrintPreview(org.eclipse.swt.widgets.Widget).sendEvent(int, org.eclipse.swt.widgets.Event) line: 1064
org.eclipse.nebula.paperclips.widgets.PrintPreview(org.eclipse.swt.widgets.Composite).WM_PAINT(long, long) line: 1564
org.eclipse.nebula.paperclips.widgets.PrintPreview(org.eclipse.swt.widgets.Control).windowProc(long, int, long, long) line: 4825
org.eclipse.nebula.paperclips.widgets.PrintPreview(org.eclipse.swt.widgets.Canvas).windowProc(long, int, long, long) line: 348
org.eclipse.swt.widgets.Display.windowProc(long, long, long, long) line: 4778
org.eclipse.swt.internal.win32.OS.DispatchMessage(org.eclipse.swt.internal.win32.MSG) line: not available [native method]
org.eclipse.swt.widgets.Display.readAndDispatch() line: 3545
我在画之前确实尝试过缩放图像,但没有帮助。有一些 answer 可能会有帮助,但我可能不明白如何实施它。