Example #1
0
 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);
 }
Example #2
0
 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));
 }
Example #3
0
        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);
        }