0

如何在 monomac 中打印?这是我所能得到的,但我似乎无法在 NSView 中获得对图形上下文的引用。如果我向 PrintDoc 添加一个控件,那很好,但我想绘制。

//Print Function
void Print(){
    PrintDoc NewDoc = new PrintDoc ();
    NewDoc.SetFrameSize(new SizeF(600,1000));
    NSPrintOperation P = NSPrintOperation.FromView (NewDoc);
    P.RunOperation ();
}

//NSView to be printed
class PrintDoc:NSView
{
    public PrintDoc ()
    {
    }
    public override void DrawRect (System.Drawing.RectangleF dirtyRect)
    {
        //NSPrintOperation.CurrentOperation.Context !! this is null
        //NSGraphicsContext.CurrentContext !! this hangs
    }
}
4

1 回答 1

0

我设法通过手动获取上下文而不是使用 NSGraphicsContext.CurrentContext 来使其工作:

https://github.com/picoe/Eto/blob/feature/printing/Source/Eto.Platform.Mac/Forms/Printing/PrintDocumentHandler.cs#L39

片段:

static IntPtr selCurrentContext = Selector.GetHandle ("currentContext");
static IntPtr classNSGraphicsContext = Class.GetHandle ("NSGraphicsContext");

public override void DrawRect (System.Drawing.RectangleF dirtyRect)
{
    var operation = NSPrintOperation.CurrentOperation;

    var context = new NSGraphicsContext(Messaging.IntPtr_objc_msgSend (classNSGraphicsContext, selCurrentContext));
    // this causes monomac to hang for some reason:
    //var context = NSGraphicsContext.CurrentContext;
}
于 2012-11-17T17:54:20.683 回答