public override void OnStartPrint(PrintDocument document, PrintEventArgs e) { this.CheckSecurity(document); base.OnStartPrint(document, e); if (!document.PrinterSettings.IsValid) { throw new InvalidPrinterException(document.PrinterSettings); } this.dc = document.PrinterSettings.CreateDeviceContext((IntPtr)base.modeHandle); SafeNativeMethods.DOCINFO lpDocInfo = new SafeNativeMethods.DOCINFO { lpszDocName = document.DocumentName }; if (document.PrinterSettings.PrintToFile) { lpDocInfo.lpszOutput = document.PrinterSettings.OutputPort; } else { lpDocInfo.lpszOutput = null; } lpDocInfo.lpszDatatype = null; lpDocInfo.fwType = 0; if (SafeNativeMethods.StartDoc(new HandleRef(this.dc, this.dc.Hdc), lpDocInfo) <= 0) { int error = Marshal.GetLastWin32Error(); if (error != 0x4c7) { throw new Win32Exception(error); } e.Cancel = true; } }
public override void OnStartPrint(PrintDocument document, PrintEventArgs e) { Debug.Assert(dc == null && graphics == null, "PrintController methods called in the wrong order?"); // For security purposes, don't assume our public methods methods are called in any particular order CheckSecurity(document); base.OnStartPrint(document, e); // the win32 methods below SuppressUnmanagedCodeAttributes so assertin on UnmanagedCodePermission is redundant if (!document.PrinterSettings.IsValid) { throw new InvalidPrinterException(document.PrinterSettings); } dc = document.PrinterSettings.CreateDeviceContext(modeHandle); SafeNativeMethods.DOCINFO info = new SafeNativeMethods.DOCINFO(); info.lpszDocName = document.DocumentName; if (document.PrinterSettings.PrintToFile) { info.lpszOutput = document.PrinterSettings.OutputPort; //This will be "FILE:" } else { info.lpszOutput = null; } info.lpszDatatype = null; info.fwType = 0; int result = SafeNativeMethods.StartDoc(new HandleRef(this.dc, dc.Hdc), info); if (result <= 0) { int error = Marshal.GetLastWin32Error(); if (error == SafeNativeMethods.ERROR_CANCELLED) { e.Cancel = true; } else { throw new Win32Exception(error); } } }
/// <include file='doc\DefaultPrintController.uex' path='docs/doc[@for="StandardPrintController.OnStartPrint"]/*' /> /// <devdoc> /// <para> /// Implements StartPrint for printing to a physical printer. /// </para> /// </devdoc> public override void OnStartPrint(PrintDocument document, PrintEventArgs e) { Debug.Assert(dc == IntPtr.Zero && graphics == null, "PrintController methods called in the wrong order?"); // For security purposes, don't assume our public methods methods are called in any particular order CheckSecurity(document); base.OnStartPrint(document, e); IntSecurity.AllPrintingAndUnmanagedCode.Assert(); if (!document.PrinterSettings.IsValid) { throw new InvalidPrinterException(document.PrinterSettings); } dc = document.PrinterSettings.CreateHdc(modeHandle); SafeNativeMethods.DOCINFO info = new SafeNativeMethods.DOCINFO(); info.lpszDocName = document.DocumentName; if (document.PrinterSettings.PrintToFile) { info.lpszOutput = document.PrinterSettings.OutputPort; //This will be "FILE:" } else { info.lpszOutput = null; } info.lpszDatatype = null; info.fwType = 0; int result = SafeNativeMethods.StartDoc(new HandleRef(this, dc), info); if (result <= 0) { throw new Win32Exception(); } }