private static void UpdateSettings(System.Windows.Forms.NativeMethods.PAGESETUPDLG data, System.Drawing.Printing.PageSettings pageSettings, System.Drawing.Printing.PrinterSettings printerSettings) { System.Windows.Forms.IntSecurity.AllPrintingAndUnmanagedCode.Assert(); try { pageSettings.SetHdevmode(data.hDevMode); if (printerSettings != null) { printerSettings.SetHdevmode(data.hDevMode); printerSettings.SetHdevnames(data.hDevNames); } } finally { CodeAccessPermission.RevertAssert(); } Margins margins = new Margins { Left = data.marginLeft, Top = data.marginTop, Right = data.marginRight, Bottom = data.marginBottom }; PrinterUnit fromUnit = ((data.Flags & 8) != 0) ? PrinterUnit.HundredthsOfAMillimeter : PrinterUnit.ThousandthsOfAnInch; pageSettings.Margins = PrinterUnitConvert.Convert(margins, fromUnit, PrinterUnit.Display); }
protected override bool RunDialog(IntPtr hwndOwner) { System.Windows.Forms.NativeMethods.PAGESETUPDLG pagesetupdlg; bool flag2; System.Windows.Forms.IntSecurity.SafePrinting.Demand(); System.Windows.Forms.NativeMethods.WndProc proc = new System.Windows.Forms.NativeMethods.WndProc(this.HookProc); if (this.pageSettings == null) { throw new ArgumentException(System.Windows.Forms.SR.GetString("PSDcantShowWithoutPage")); } pagesetupdlg = new System.Windows.Forms.NativeMethods.PAGESETUPDLG { lStructSize = Marshal.SizeOf(pagesetupdlg), Flags = this.GetFlags(), hwndOwner = hwndOwner, lpfnPageSetupHook = proc }; PrinterUnit thousandthsOfAnInch = PrinterUnit.ThousandthsOfAnInch; if (this.EnableMetric) { StringBuilder lpLCData = new StringBuilder(2); if ((UnsafeNativeMethods.GetLocaleInfo(System.Windows.Forms.NativeMethods.LOCALE_USER_DEFAULT, 13, lpLCData, lpLCData.Capacity) > 0) && (int.Parse(lpLCData.ToString(), CultureInfo.InvariantCulture) == 0)) { thousandthsOfAnInch = PrinterUnit.HundredthsOfAMillimeter; } } if (this.MinMargins != null) { Margins margins = PrinterUnitConvert.Convert(this.MinMargins, PrinterUnit.Display, thousandthsOfAnInch); pagesetupdlg.minMarginLeft = margins.Left; pagesetupdlg.minMarginTop = margins.Top; pagesetupdlg.minMarginRight = margins.Right; pagesetupdlg.minMarginBottom = margins.Bottom; } if (this.pageSettings.Margins != null) { Margins margins2 = PrinterUnitConvert.Convert(this.pageSettings.Margins, PrinterUnit.Display, thousandthsOfAnInch); pagesetupdlg.marginLeft = margins2.Left; pagesetupdlg.marginTop = margins2.Top; pagesetupdlg.marginRight = margins2.Right; pagesetupdlg.marginBottom = margins2.Bottom; } pagesetupdlg.marginLeft = Math.Max(pagesetupdlg.marginLeft, pagesetupdlg.minMarginLeft); pagesetupdlg.marginTop = Math.Max(pagesetupdlg.marginTop, pagesetupdlg.minMarginTop); pagesetupdlg.marginRight = Math.Max(pagesetupdlg.marginRight, pagesetupdlg.minMarginRight); pagesetupdlg.marginBottom = Math.Max(pagesetupdlg.marginBottom, pagesetupdlg.minMarginBottom); System.Drawing.Printing.PrinterSettings settings = (this.printerSettings == null) ? this.pageSettings.PrinterSettings : this.printerSettings; System.Windows.Forms.IntSecurity.AllPrintingAndUnmanagedCode.Assert(); try { pagesetupdlg.hDevMode = settings.GetHdevmode(this.pageSettings); pagesetupdlg.hDevNames = settings.GetHdevnames(); } finally { CodeAccessPermission.RevertAssert(); } try { if (!UnsafeNativeMethods.PageSetupDlg(pagesetupdlg)) { return(false); } UpdateSettings(pagesetupdlg, this.pageSettings, this.printerSettings); flag2 = true; } finally { UnsafeNativeMethods.GlobalFree(new HandleRef(pagesetupdlg, pagesetupdlg.hDevMode)); UnsafeNativeMethods.GlobalFree(new HandleRef(pagesetupdlg, pagesetupdlg.hDevNames)); } return(flag2); }
protected override bool RunDialog(IntPtr hwndOwner) { System.Windows.Forms.NativeMethods.PAGESETUPDLG pagesetupdlg; bool flag2; System.Windows.Forms.IntSecurity.SafePrinting.Demand(); System.Windows.Forms.NativeMethods.WndProc proc = new System.Windows.Forms.NativeMethods.WndProc(this.HookProc); if (this.pageSettings == null) { throw new ArgumentException(System.Windows.Forms.SR.GetString("PSDcantShowWithoutPage")); } pagesetupdlg = new System.Windows.Forms.NativeMethods.PAGESETUPDLG { lStructSize = Marshal.SizeOf(pagesetupdlg), Flags = this.GetFlags(), hwndOwner = hwndOwner, lpfnPageSetupHook = proc }; PrinterUnit thousandthsOfAnInch = PrinterUnit.ThousandthsOfAnInch; if (this.EnableMetric) { StringBuilder lpLCData = new StringBuilder(2); if ((UnsafeNativeMethods.GetLocaleInfo(System.Windows.Forms.NativeMethods.LOCALE_USER_DEFAULT, 13, lpLCData, lpLCData.Capacity) > 0) && (int.Parse(lpLCData.ToString(), CultureInfo.InvariantCulture) == 0)) { thousandthsOfAnInch = PrinterUnit.HundredthsOfAMillimeter; } } if (this.MinMargins != null) { Margins margins = PrinterUnitConvert.Convert(this.MinMargins, PrinterUnit.Display, thousandthsOfAnInch); pagesetupdlg.minMarginLeft = margins.Left; pagesetupdlg.minMarginTop = margins.Top; pagesetupdlg.minMarginRight = margins.Right; pagesetupdlg.minMarginBottom = margins.Bottom; } if (this.pageSettings.Margins != null) { Margins margins2 = PrinterUnitConvert.Convert(this.pageSettings.Margins, PrinterUnit.Display, thousandthsOfAnInch); pagesetupdlg.marginLeft = margins2.Left; pagesetupdlg.marginTop = margins2.Top; pagesetupdlg.marginRight = margins2.Right; pagesetupdlg.marginBottom = margins2.Bottom; } pagesetupdlg.marginLeft = Math.Max(pagesetupdlg.marginLeft, pagesetupdlg.minMarginLeft); pagesetupdlg.marginTop = Math.Max(pagesetupdlg.marginTop, pagesetupdlg.minMarginTop); pagesetupdlg.marginRight = Math.Max(pagesetupdlg.marginRight, pagesetupdlg.minMarginRight); pagesetupdlg.marginBottom = Math.Max(pagesetupdlg.marginBottom, pagesetupdlg.minMarginBottom); System.Drawing.Printing.PrinterSettings settings = (this.printerSettings == null) ? this.pageSettings.PrinterSettings : this.printerSettings; System.Windows.Forms.IntSecurity.AllPrintingAndUnmanagedCode.Assert(); try { pagesetupdlg.hDevMode = settings.GetHdevmode(this.pageSettings); pagesetupdlg.hDevNames = settings.GetHdevnames(); } finally { CodeAccessPermission.RevertAssert(); } try { if (!UnsafeNativeMethods.PageSetupDlg(pagesetupdlg)) { return false; } UpdateSettings(pagesetupdlg, this.pageSettings, this.printerSettings); flag2 = true; } finally { UnsafeNativeMethods.GlobalFree(new HandleRef(pagesetupdlg, pagesetupdlg.hDevMode)); UnsafeNativeMethods.GlobalFree(new HandleRef(pagesetupdlg, pagesetupdlg.hDevNames)); } return flag2; }