internal static System.Windows.Forms.NativeMethods.PRINTDLG CreatePRINTDLG() { System.Windows.Forms.NativeMethods.PRINTDLG structure = null; if (IntPtr.Size == 4) { structure = new System.Windows.Forms.NativeMethods.PRINTDLG_32(); } else { structure = new System.Windows.Forms.NativeMethods.PRINTDLG_64(); } structure.lStructSize = Marshal.SizeOf(structure); structure.hwndOwner = IntPtr.Zero; structure.hDevMode = IntPtr.Zero; structure.hDevNames = IntPtr.Zero; structure.Flags = 0; structure.hDC = IntPtr.Zero; structure.nFromPage = 1; structure.nToPage = 1; structure.nMinPage = 0; structure.nMaxPage = 0x270f; structure.nCopies = 1; structure.hInstance = IntPtr.Zero; structure.lCustData = IntPtr.Zero; structure.lpfnPrintHook = null; structure.lpfnSetupHook = null; structure.lpPrintTemplateName = null; structure.lpSetupTemplateName = null; structure.hPrintTemplate = IntPtr.Zero; structure.hSetupTemplate = IntPtr.Zero; return(structure); }
protected override bool RunDialog(IntPtr hwndOwner) { System.Windows.Forms.IntSecurity.SafePrinting.Demand(); System.Windows.Forms.NativeMethods.WndProc hookProcPtr = new System.Windows.Forms.NativeMethods.WndProc(this.HookProc); if ((!this.UseEXDialog || (Environment.OSVersion.Platform != PlatformID.Win32NT)) || (Environment.OSVersion.Version.Major < 5)) { System.Windows.Forms.NativeMethods.PRINTDLG printdlg = CreatePRINTDLG(); return(this.ShowPrintDialog(hwndOwner, hookProcPtr, printdlg)); } System.Windows.Forms.NativeMethods.PRINTDLGEX data = CreatePRINTDLGEX(); return(this.ShowPrintDialog(hwndOwner, data)); }
private bool ShowPrintDialog(IntPtr hwndOwner, System.Windows.Forms.NativeMethods.WndProc hookProcPtr, System.Windows.Forms.NativeMethods.PRINTDLG data) { bool flag; data.Flags = this.GetFlags(); data.nCopies = this.PrinterSettings.Copies; data.hwndOwner = hwndOwner; data.lpfnPrintHook = hookProcPtr; System.Windows.Forms.IntSecurity.AllPrintingAndUnmanagedCode.Assert(); try { if (this.PageSettings == null) { data.hDevMode = this.PrinterSettings.GetHdevmode(); } else { data.hDevMode = this.PrinterSettings.GetHdevmode(this.PageSettings); } data.hDevNames = this.PrinterSettings.GetHdevnames(); } catch (InvalidPrinterException) { data.hDevMode = IntPtr.Zero; data.hDevNames = IntPtr.Zero; } finally { CodeAccessPermission.RevertAssert(); } try { if (this.AllowSomePages) { if ((this.PrinterSettings.FromPage < this.PrinterSettings.MinimumPage) || (this.PrinterSettings.FromPage > this.PrinterSettings.MaximumPage)) { throw new ArgumentException(System.Windows.Forms.SR.GetString("PDpageOutOfRange", new object[] { "FromPage" })); } if ((this.PrinterSettings.ToPage < this.PrinterSettings.MinimumPage) || (this.PrinterSettings.ToPage > this.PrinterSettings.MaximumPage)) { throw new ArgumentException(System.Windows.Forms.SR.GetString("PDpageOutOfRange", new object[] { "ToPage" })); } if (this.PrinterSettings.ToPage < this.PrinterSettings.FromPage) { throw new ArgumentException(System.Windows.Forms.SR.GetString("PDpageOutOfRange", new object[] { "FromPage" })); } data.nFromPage = (short)this.PrinterSettings.FromPage; data.nToPage = (short)this.PrinterSettings.ToPage; data.nMinPage = (short)this.PrinterSettings.MinimumPage; data.nMaxPage = (short)this.PrinterSettings.MaximumPage; } if (!UnsafeNativeMethods.PrintDlg(data)) { return(false); } System.Windows.Forms.IntSecurity.AllPrintingAndUnmanagedCode.Assert(); try { UpdatePrinterSettings(data.hDevMode, data.hDevNames, data.nCopies, data.Flags, this.settings, this.PageSettings); } finally { CodeAccessPermission.RevertAssert(); } this.PrintToFile = (data.Flags & 0x20) != 0; this.PrinterSettings.PrintToFile = this.PrintToFile; if (this.AllowSomePages) { this.PrinterSettings.FromPage = data.nFromPage; this.PrinterSettings.ToPage = data.nToPage; } if (((data.Flags & 0x40000) == 0) && (Environment.OSVersion.Version.Major >= 6)) { this.PrinterSettings.Copies = data.nCopies; this.PrinterSettings.Collate = (data.Flags & 0x10) == 0x10; } flag = true; } finally { UnsafeNativeMethods.GlobalFree(new HandleRef(data, data.hDevMode)); UnsafeNativeMethods.GlobalFree(new HandleRef(data, data.hDevNames)); } return(flag); }