private static IntPtr BeginDraw(Bitmap bmp, Graphics graphics, int x1, int y1, int x2, int y2, bool dash, out int oldRop, out IntPtr img, out IntPtr oldpen) { var gHdc = graphics.GetHdc(); var hdc = CreateCompatibleDC(gHdc); graphics.ReleaseHdc(hdc); img = bmp.GetHbitmap(); SelectObject(hdc, img); oldpen = IntPtr.Zero; if (dash) { var pen = CreatePen(PenStyle.PS_DOT, 1, 0); oldpen = SelectObject(hdc, pen); } oldRop = SetROP2(hdc, (int)BinaryRasterOperations.R2_NOTXORPEN); // Switch to inverted mode. (XOR) SetGraphicsMode(hdc, (int)GraphicsMode.GM_ADVANCED); XFORM transform = graphics.Transform; SetWorldTransform(hdc, ref transform); return(hdc); }
void Pack(BufferChunk chunk, XFORM aTrans) { //chunk += aTrans.eDx; //chunk += aTrans.eDy; //chunk += aTrans.eM11; //chunk += aTrans.eM12; //chunk += aTrans.eM21; //chunk += aTrans.eM22; }
public static void Pack(BufferChunk chunk, XFORM aTrans) { chunk += aTrans.eDx; chunk += aTrans.eDy; chunk += aTrans.eM11; chunk += aTrans.eM12; chunk += aTrans.eM21; chunk += aTrans.eM22; }
//public XFORM WorldTransform //{ // get { return GetWorldTransform(); } // set { SetWorldTransform(value); } //} //private XFORM GetWorldTransform() //{ // XFORM aTransform = new XFORM(); // bool result = GDI32.GetWorldTransform(DeviceContext, out aTransform); // return aTransform; //} public override void SetWorldTransform(XFORM aTransform) { BufferChunk chunk = new BufferChunk(1024); chunk += GDI32.EMR_SETWORLDTRANSFORM; Pack(chunk, aTransform); PackCommand(chunk); }
/// <summary> /// /// </summary> /// <param name="g"></param> /// <param name="useTransfrom"></param> public RadHdcWrapper(Graphics g, bool useTransfrom) { this.graphics = g; Region rg = g.Clip; this.clipRegion = rg.GetHrgn(g); rg.Dispose(); this.useTransform = useTransfrom; if (this.useTransform) { Matrix m = g.Transform; transform = XFORM.FromMatrix(m); } }
public unsafe static extern RegionHandle ExtCreateRegion( [In] ref XFORM lpXform, uint nCount, RGNDATA *lpRgnData);
public static extern bool SetWorldTransform( DeviceContext hdc, [In] ref XFORM lpXform);
public static extern IntPtr ExtCreateRegion(ref XFORM lpXform, int nCount, IntPtr lpRgnData);
public static extern bool SetWorldTransform(IntPtr DC, ref XFORM p2);
public static void DrawString(Graphics g, string text, Font font, Color color, Rectangle rect, Alignment alignment, VAlignment valignment, TextSplitting textSplitting, Ampersands ampersands) { if (g == null) { throw new ArgumentNullException("g"); } if (text == null) { throw new ArgumentNullException("text"); } if (font == null) { throw new ArgumentNullException("font"); } if (ampersands == Ampersands.Display) { text = text.Replace("&", "&&"); } float[] txValues = g.Transform.Elements; IntPtr hClipRgn = g.Clip.GetHrgn(g); IntPtr hDC = g.GetHdc(); Gdi.SelectClipRgn(hDC, hClipRgn); int oldGraphicsMode = Gdi.SetGraphicsMode(hDC, 2); XFORM oldXForm = new XFORM(); Gdi.GetWorldTransform(hDC, ref oldXForm); XFORM newXForm = new XFORM(); newXForm.eM11 = txValues[0]; newXForm.eM12 = txValues[1]; newXForm.eM21 = txValues[2]; newXForm.eM22 = txValues[3]; newXForm.eDx = txValues[4]; newXForm.eDy = txValues[5]; Gdi.SetWorldTransform(hDC, ref newXForm); try { IntPtr hFont = font.ToHfont(); IntPtr hOldFont = Gdi.SelectObject(hDC, hFont); try { RECT r = new RECT(rect); User.DrawTextFlags uFormat; switch (textSplitting) { case TextSplitting.SingleLineEllipsis: uFormat = User.DrawTextFlags.DT_WORD_ELLIPSIS | User.DrawTextFlags.DT_END_ELLIPSIS; break; case TextSplitting.MultiLine: uFormat = User.DrawTextFlags.DT_WORDBREAK; break; default: throw new InvalidOperationException(); } switch (alignment) { case Alignment.Left: break; case Alignment.Center: uFormat = User.DrawTextFlags.DT_CENTER; break; case Alignment.Right: uFormat = User.DrawTextFlags.DT_RIGHT; break; default: throw new InvalidOperationException(); } switch (valignment) { case VAlignment.Top: break; case VAlignment.Bottom: uFormat |= User.DrawTextFlags.DT_BOTTOM | User.DrawTextFlags.DT_SINGLELINE; break; case VAlignment.Center: uFormat |= User.DrawTextFlags.DT_VCENTER | User.DrawTextFlags.DT_SINGLELINE; break; } uint bgr = (uint)((color.B << 16) | (color.G << 8) | (color.R)); uint oldColor = Gdi.SetTextColor(hDC, bgr); try { BackgroundMode oldBackgroundMode = Gdi.SetBkMode(hDC, BackgroundMode.TRANSPARENT); try { User.DrawText(hDC, text, text.Length, ref r, uFormat); } finally { Gdi.SetBkMode(hDC, oldBackgroundMode); } } finally { Gdi.SetTextColor(hDC, oldColor); } } finally { Gdi.SelectObject(hDC, hOldFont); Gdi.DeleteObject(hFont); } } finally { if (oldGraphicsMode == 1) { oldXForm.eM11 = 1; oldXForm.eM12 = 0; oldXForm.eM21 = 0; oldXForm.eM22 = 1; oldXForm.eDx = 0; oldXForm.eDx = 0; } Gdi.SetWorldTransform(hDC, ref oldXForm); Gdi.SetGraphicsMode(hDC, oldGraphicsMode); g.ReleaseHdc(hDC); if (hClipRgn != IntPtr.Zero) { g.Clip.ReleaseHrgn(hClipRgn); } } }
public static extern bool SetWorldTransform(HDC hdc, ref XFORM xf);
public static extern int SetWorldTransform(IntPtr tmp_hDC, ref XFORM lpXform);
public static extern int ModifyWorldTransform(IntPtr tmp_hDC, ref XFORM lpXform, uint iMode);
public static extern bool GetWorldTransform(Win32DCSafeHandle hdc, [In][Out] ref XFORM lpXform);
public static extern bool GetWorldTransform(IntPtr hdc, [In][Out] ref XFORM lpXform);
public static extern bool GetWorldTransform(IntPtr hdc, [Out] out XFORM lpXform);
public static extern bool GetWorldTransform(HDC hdc, out XFORM xf);
public static extern bool ModifyWorldTransform(HDC hdc, ref XFORM xf, uint nMode);
private static extern int SetWorldTransform(IntPtr hdc, ref XFORM xForm);
public static extern int SetWorldTransform(HandleRef hdc, XFORM xform);
[DllImport("gdi32.dll")] public static extern bool SetWorldTransform(HDC hdc, ref XFORM lpXform);
private static extern int ModifyWorldTransform(IntPtr hdc, ref XFORM xForm, int mode);
public static extern bool CombineTransform( out XFORM lpxformResult, [In] ref XFORM lpxform1, [In] ref XFORM lpxform2);
public static extern bool GetWorldTransform( DeviceContext hdc, out XFORM lpXform);
static extern bool SetWorldTransform(IntPtr hdc, [In] ref XFORM lpXform);
public static extern bool ModifyWorldTransform( DeviceContext hdc, [In] ref XFORM lpXform, WorldTransformMode iMode);
public static extern bool ModifyWorldTransform(IntPtr hdc, [In] ref XFORM lpXform, uint iMode);
internal static extern bool SetWorldTransform(Win32DCSafeHandle hdc, [In] ref XFORM lpXform);