2012-11-17 2 views
0

Как напечатать в мономаке? Это насколько я могу получить, но я не могу получить ссылку на графический контекст в NSView. Если я добавлю контроль над PrintDoc, это нормально, но я хочу рисовать.Печать в Monomac

//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 
    } 
} 

ответ

0

мне удалось получить его работу, получая контекст вручную, вместо использования NSGraphicsContext.CurrentContext:

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

Snippet:

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; 
} 
+0

WooHoo !!! Это сработало, не знаю, как вы придумали этот хак, но хорошо вам. –

Смежные вопросы