Exemplo n.º 1
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));
 }
Exemplo n.º 2
0
        private unsafe bool ShowPrintDialog(IntPtr hwndOwner, System.Windows.Forms.NativeMethods.PRINTDLGEX data)
        {
            bool flag;

            data.Flags     = this.GetFlags();
            data.nCopies   = this.PrinterSettings.Copies;
            data.hwndOwner = hwndOwner;
            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" }));
                    }
                    int *pageRanges = (int *)data.pageRanges;
                    pageRanges[0] = this.PrinterSettings.FromPage;
                    pageRanges++;
                    pageRanges[0]    = this.PrinterSettings.ToPage;
                    data.nPageRanges = 1;
                    data.nMinPage    = this.PrinterSettings.MinimumPage;
                    data.nMaxPage    = this.PrinterSettings.MaximumPage;
                }
                data.Flags &= -2099201;
                if (System.Windows.Forms.NativeMethods.Failed(UnsafeNativeMethods.PrintDlgEx(data)) || (data.dwResultAction == 0))
                {
                    return(false);
                }
                System.Windows.Forms.IntSecurity.AllPrintingAndUnmanagedCode.Assert();
                try
                {
                    UpdatePrinterSettings(data.hDevMode, data.hDevNames, (short)data.nCopies, data.Flags, this.PrinterSettings, this.PageSettings);
                }
                finally
                {
                    CodeAccessPermission.RevertAssert();
                }
                this.PrintToFile = (data.Flags & 0x20) != 0;
                this.PrinterSettings.PrintToFile = this.PrintToFile;
                if (this.AllowSomePages)
                {
                    int *numPtr2 = (int *)data.pageRanges;
                    this.PrinterSettings.FromPage = numPtr2[0];
                    numPtr2++;
                    this.PrinterSettings.ToPage = numPtr2[0];
                }
                if (((data.Flags & 0x40000) == 0) && (Environment.OSVersion.Version.Major >= 6))
                {
                    this.PrinterSettings.Copies  = (short)data.nCopies;
                    this.PrinterSettings.Collate = (data.Flags & 0x10) == 0x10;
                }
                flag = data.dwResultAction == 1;
            }
            finally
            {
                if (data.hDevMode != IntPtr.Zero)
                {
                    UnsafeNativeMethods.GlobalFree(new HandleRef(data, data.hDevMode));
                }
                if (data.hDevNames != IntPtr.Zero)
                {
                    UnsafeNativeMethods.GlobalFree(new HandleRef(data, data.hDevNames));
                }
                if (data.pageRanges != IntPtr.Zero)
                {
                    UnsafeNativeMethods.GlobalFree(new HandleRef(data, data.pageRanges));
                }
            }
            return(flag);
        }