Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / CommonUI / System / Drawing / Printing / PrintPreviewGraphics.cs / 1 / PrintPreviewGraphics.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Drawing {
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Diagnostics;
using System;
using Microsoft.Win32;
using System.Security;
using System.Security.Permissions;
using System.Drawing.Internal;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;
///
///
/// Retrives the printer graphics during preview.
///
internal class PrintPreviewGraphics {
private PrintPageEventArgs printPageEventArgs;
private PrintDocument printDocument;
public PrintPreviewGraphics(PrintDocument document, PrintPageEventArgs e) {
printPageEventArgs = e;
printDocument = document;
}
///
///
/// Gets the Visible bounds of this graphics object. Used during print preview.
///
public RectangleF VisibleClipBounds {
get {
IntPtr hdevMode = printPageEventArgs.PageSettings.PrinterSettings.GetHdevmodeInternal();
using( DeviceContext dc = printPageEventArgs.PageSettings.PrinterSettings.CreateDeviceContext(hdevMode)) {
using( Graphics graphics = Graphics.FromHdcInternal(dc.Hdc) ) {
if (printDocument.OriginAtMargins) {
// Adjust the origin of the graphics object to be at the user-specified margin location
// Note: Graphics.FromHdc internally calls SaveDC(hdc), we can still use the saved hdc to get the resolution.
int dpiX = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.LOGPIXELSX);
int dpiY = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.LOGPIXELSY);
int hardMarginX_DU = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.PHYSICALOFFSETX);
int hardMarginY_DU = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.PHYSICALOFFSETY);
float hardMarginX = hardMarginX_DU * 100 / dpiX;
float hardMarginY = hardMarginY_DU * 100 / dpiY;
graphics.TranslateTransform(-hardMarginX, -hardMarginY);
graphics.TranslateTransform(printDocument.DefaultPageSettings.Margins.Left, printDocument.DefaultPageSettings.Margins.Top);
}
return graphics.VisibleClipBounds;
}
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Drawing {
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Diagnostics;
using System;
using Microsoft.Win32;
using System.Security;
using System.Security.Permissions;
using System.Drawing.Internal;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;
///
///
/// Retrives the printer graphics during preview.
///
internal class PrintPreviewGraphics {
private PrintPageEventArgs printPageEventArgs;
private PrintDocument printDocument;
public PrintPreviewGraphics(PrintDocument document, PrintPageEventArgs e) {
printPageEventArgs = e;
printDocument = document;
}
///
///
/// Gets the Visible bounds of this graphics object. Used during print preview.
///
public RectangleF VisibleClipBounds {
get {
IntPtr hdevMode = printPageEventArgs.PageSettings.PrinterSettings.GetHdevmodeInternal();
using( DeviceContext dc = printPageEventArgs.PageSettings.PrinterSettings.CreateDeviceContext(hdevMode)) {
using( Graphics graphics = Graphics.FromHdcInternal(dc.Hdc) ) {
if (printDocument.OriginAtMargins) {
// Adjust the origin of the graphics object to be at the user-specified margin location
// Note: Graphics.FromHdc internally calls SaveDC(hdc), we can still use the saved hdc to get the resolution.
int dpiX = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.LOGPIXELSX);
int dpiY = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.LOGPIXELSY);
int hardMarginX_DU = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.PHYSICALOFFSETX);
int hardMarginY_DU = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(dc, dc.Hdc), SafeNativeMethods.PHYSICALOFFSETY);
float hardMarginX = hardMarginX_DU * 100 / dpiX;
float hardMarginY = hardMarginY_DU * 100 / dpiY;
graphics.TranslateTransform(-hardMarginX, -hardMarginY);
graphics.TranslateTransform(printDocument.DefaultPageSettings.Margins.Left, printDocument.DefaultPageSettings.Margins.Top);
}
return graphics.VisibleClipBounds;
}
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Object.cs
- Expander.cs
- QueueProcessor.cs
- ClipboardProcessor.cs
- TraceHwndHost.cs
- RuntimeWrappedException.cs
- BitmapData.cs
- Rijndael.cs
- HelpProvider.cs
- ImageIndexConverter.cs
- PKCS1MaskGenerationMethod.cs
- PreApplicationStartMethodAttribute.cs
- WindowInteropHelper.cs
- ContainerActivationHelper.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- itemelement.cs
- ResourceAttributes.cs
- DomNameTable.cs
- RangeContentEnumerator.cs
- MdiWindowListItemConverter.cs
- DataGridViewRowsAddedEventArgs.cs
- RsaElement.cs
- CodeCatchClauseCollection.cs
- GetIsBrowserClientRequest.cs
- PrintEvent.cs
- RemotingServices.cs
- WeakHashtable.cs
- BamlTreeUpdater.cs
- RegistrySecurity.cs
- GridItemPatternIdentifiers.cs
- ReachBasicContext.cs
- EntitySqlQueryCacheKey.cs
- BinaryConverter.cs
- PositiveTimeSpanValidatorAttribute.cs
- Missing.cs
- SQLByteStorage.cs
- MSAANativeProvider.cs
- ClearTypeHintValidation.cs
- QueryRewriter.cs
- DataGridColumnCollection.cs
- XmlArrayAttribute.cs
- PreviewKeyDownEventArgs.cs
- Opcode.cs
- Vector3D.cs
- HttpProfileBase.cs
- ProfilePropertySettings.cs
- CasesDictionary.cs
- Size3D.cs
- ObjRef.cs
- Tablet.cs
- AddInServer.cs
- SafeMarshalContext.cs
- CustomValidator.cs
- DuplicateDetector.cs
- UIElement3D.cs
- BufferedOutputStream.cs
- ObfuscateAssemblyAttribute.cs
- FormViewModeEventArgs.cs
- Section.cs
- CompiledQuery.cs
- InputLanguageProfileNotifySink.cs
- PolicyStatement.cs
- sqlmetadatafactory.cs
- EncryptedKeyIdentifierClause.cs
- InstalledVoice.cs
- TargetParameterCountException.cs
- MethodImplAttribute.cs
- AsyncResult.cs
- Parameter.cs
- Attributes.cs
- IdentityNotMappedException.cs
- MediaElementAutomationPeer.cs
- DrawingVisual.cs
- ReadOnlyPropertyMetadata.cs
- HideDisabledControlAdapter.cs
- PersonalizableAttribute.cs
- ExpressionList.cs
- PropertyChangedEventArgs.cs
- ProfileServiceManager.cs
- OleDbConnectionInternal.cs
- FloaterBaseParaClient.cs
- AsymmetricAlgorithm.cs
- DataObject.cs
- XhtmlBasicCalendarAdapter.cs
- TabPage.cs
- CaseCqlBlock.cs
- EnumConverter.cs
- CacheModeValueSerializer.cs
- Matrix3DValueSerializer.cs
- AttachedAnnotation.cs
- RuntimeConfigLKG.cs
- SequentialWorkflowHeaderFooter.cs
- Vector.cs
- BoundsDrawingContextWalker.cs
- AttachmentCollection.cs
- GetLedgerEntryForRecipientRequest.cs
- EntityClassGenerator.cs
- KeyEventArgs.cs
- Tokenizer.cs
- SqlBooleanizer.cs