int CommandPacked(IntPtr hdc, IntPtr lpht, EMR command, int hHandles, IntPtr data) { // Pack up command fMemoryStream.Seek(0, SeekOrigin.Begin); fFormatter.Serialize(fMemoryStream, command); byte[] sendBytes = fMemoryStream.GetBuffer(); Send(sendBytes); return 1; }
void PackCommand(EMR aCommand) { BinaryFormatter fFormatter = new BinaryFormatter(); MemoryStream fMemoryStream = new MemoryStream(2048); fMemoryStream.Seek(0, SeekOrigin.Begin); fFormatter.Serialize(fMemoryStream, aCommand); byte[] sendBytes = fMemoryStream.GetBuffer(); BufferChunk chunk = new BufferChunk(sendBytes); //PackCommand(chunk); }
public static BufferChunk Pack(EMR aCommand) { BinaryFormatter fFormatter = new BinaryFormatter(); MemoryStream fMemoryStream = new MemoryStream(2048); fMemoryStream.Seek(0, SeekOrigin.Begin); fFormatter.Serialize(fMemoryStream, aCommand); byte[] sendBytes = fMemoryStream.GetBuffer(); BufferChunk chunk = new BufferChunk(sendBytes); return chunk; }
public virtual void ReceiveCommand(EMR aRecord) { // Go execute the given command switch (aRecord.Command) { case GDI32.EMR_HEADER: break; // Transform related case GDI32.EMR_SCALEVIEWPORTEXTEX: case GDI32.EMR_SCALEWINDOWEXTEX: case GDI32.EMR_SETWINDOWEXTEX: case GDI32.EMR_SETWINDOWORGEX: case GDI32.EMR_SETVIEWPORTEXTEX: break; case GDI32.EMR_SETVIEWPORTORGEX: EMRSETVIEWPORTORGEX viewportorigin = (EMRSETVIEWPORTORGEX)aRecord; fRenderer.SetViewportOrigin(viewportorigin.ptlOrigin.x, viewportorigin.ptlOrigin.y); break; case GDI32.EMR_SETWORLDTRANSFORM: case GDI32.EMR_MODIFYWORLDTRANSFORM: break; case GDI32.EMR_SETBRUSHORGEX: break; case GDI32.EMR_EOF: EMREOF eof = (EMREOF)aRecord; fRenderer.Flush(); break; case GDI32.EMR_SETPIXELV: EMRSETPIXELV aPixel = (EMRSETPIXELV)aRecord; fRenderer.SetPixel(aPixel.ptlPixel.x, aPixel.ptlPixel.y, aPixel.crColor); break; case GDI32.EMR_SETMAPPERFLAGS: break; case GDI32.EMR_SETPOLYFILLMODE: EMRSETPOLYFILLMODE polyfillmode = (EMRSETPOLYFILLMODE)aRecord; fRenderer.SetPolyFillMode((int)polyfillmode.iMode); break; case GDI32.EMR_SETSTRETCHBLTMODE: break; case GDI32.EMR_SETMAPMODE: EMRSETMAPMODE mapMode = (EMRSETMAPMODE)aRecord; fRenderer.SetMappingMode((MappingModes)mapMode.iMode); break; case GDI32.EMR_SETTEXTCOLOR: EMRSETTEXTCOLOR settextcolor = (EMRSETTEXTCOLOR)aRecord; fRenderer.SetTextColor(settextcolor.crColor); break; case GDI32.EMR_SETBKCOLOR: EMRSETBKCOLOR bkColor = (EMRSETBKCOLOR)aRecord; fRenderer.SetBkColor(bkColor.crColor); break; case GDI32.EMR_SETDCBRUSHCOLOR: EMRSETDCBRUSHCOLOR dcColor = (EMRSETDCBRUSHCOLOR)aRecord; fRenderer.SetDefaultBrushColor(dcColor.crColor); break; case GDI32.EMR_SETDCPENCOLOR: EMRSETDCPENCOLOR dcPenColor = (EMRSETDCPENCOLOR)aRecord; fRenderer.SetDefaultPenColor(dcPenColor.crColor); break; case GDI32.EMR_SETBKMODE: EMRSETBKMODE bkMode = (EMRSETBKMODE)aRecord; fRenderer.SetBkMode((int)bkMode.iMode); break; case GDI32.EMR_SETROP2: EMRSETROP2 setRop2 = (EMRSETROP2)aRecord; //fRenderer.SetROP2(setRop2.iMode); break; case GDI32.EMR_SETTEXTALIGN: case GDI32.EMR_SETCOLORADJUSTMENT: break; case GDI32.EMR_MOVETOEX: EMRMOVETO aMove = (EMRMOVETO)aRecord; fRenderer.MoveTo(aMove.ptl.x, aMove.ptl.y); break; case GDI32.EMR_OFFSETCLIPRGN: case GDI32.EMR_SETMETARGN: case GDI32.EMR_EXCLUDECLIPRECT: case GDI32.EMR_INTERSECTCLIPRECT: break; case GDI32.EMR_SAVEDC: EMRSAVEDC saveDC = (EMRSAVEDC)aRecord; fRenderer.SaveState(); break; case GDI32.EMR_RESTOREDC: EMRRESTOREDC restoreDC = (EMRRESTOREDC)aRecord; fRenderer.RestoreState(restoreDC.iRelative); break; case GDI32.EMR_CREATEPEN: EMRCREATEPEN createPen = (EMRCREATEPEN)aRecord; fRenderer.CreatePen(createPen.lopn.lopnStyle, createPen.lopn.lopnWidth, createPen.lopn.lopnColor, createPen.uniqueID); break; case GDI32.EMR_CREATEBRUSHINDIRECT: break; case GDI32.EMR_SELECTOBJECT: break; case GDI32.EMR_DELETEOBJECT: break; case GDI32.EMR_SELECTSTOCKOBJECT: EMRSELECTSTOCKOBJECT stockObject = (EMRSELECTSTOCKOBJECT)aRecord; fRenderer.SelectStockObject(stockObject.ihObject); break; case GDI32.EMR_SELECTUNIQUEOBJECT: EMRSELECTUNIQUEOBJECT uniqueObject = (EMRSELECTUNIQUEOBJECT)aRecord; fRenderer.SelectUniqueObject(uniqueObject.uniqueID); break; case GDI32.EMR_ELLIPSE: EMRELLIPSE ellipse = (EMRELLIPSE)aRecord; fRenderer.Ellipse(ellipse.rclBox.Left, ellipse.rclBox.Top, ellipse.rclBox.Right, ellipse.rclBox.Bottom); break; case GDI32.EMR_ROUNDRECT: EMRROUNDRECT round = (EMRROUNDRECT)aRecord; fRenderer.RoundRect(round.rclBox.Left,round.rclBox.Top,round.rclBox.Right,round.rclBox.Bottom, round.szlCorner.Width,round.szlCorner.Height); break; case GDI32.EMR_RECTANGLE: EMRRECTANGLE rectangle = (EMRRECTANGLE)aRecord; fRenderer.Rectangle(rectangle.rclBox); break; case GDI32.EMR_ARC: case GDI32.EMR_ARCTO: case GDI32.EMR_ANGLEARC: case GDI32.EMR_CHORD: case GDI32.EMR_PIE: break; case GDI32.EMR_SELECTPALETTE: case GDI32.EMR_CREATEPALETTE: case GDI32.EMR_SETPALETTEENTRIES: case GDI32.EMR_RESIZEPALETTE: case GDI32.EMR_REALIZEPALETTE: case GDI32.EMR_EXTFLOODFILL: break; case GDI32.EMR_LINETO: EMRLINETO aLine = (EMRLINETO)aRecord; fRenderer.LineTo(aLine.ptl); break; case GDI32.EMR_POLYDRAW: EMRPOLYDRAW polydraw = (EMRPOLYDRAW)aRecord; fRenderer.PolyDraw(polydraw.aptl, polydraw.abTypes); break; case GDI32.EMR_SETARCDIRECTION: case GDI32.EMR_SETMITERLIMIT: break; case GDI32.EMR_ABORTPATH: case GDI32.EMR_BEGINPATH: case GDI32.EMR_ENDPATH: case GDI32.EMR_CLOSEFIGURE: case GDI32.EMR_FILLPATH: case GDI32.EMR_STROKEANDFILLPATH: case GDI32.EMR_STROKEPATH: case GDI32.EMR_FLATTENPATH: case GDI32.EMR_WIDENPATH: break; case GDI32.EMR_SELECTCLIPPATH: break; case GDI32.EMR_BITBLT: EMRBITBLT bitblt = (EMRBITBLT)aRecord; Console.WriteLine("Received: {0}", aRecord.Command); break; case GDI32.EMR_POLYBEZIER: EMRPOLYBEZIER polybezier = (EMRPOLYBEZIER)aRecord; fRenderer.PolyBezier(polybezier.aptl); break; case GDI32.EMR_POLYGON: EMRPOLYGON polygon = (EMRPOLYGON)aRecord; fRenderer.Polygon(polygon.aptl); break; case GDI32.EMR_POLYLINE: EMRPOLYLINE polyLine = (EMRPOLYLINE)aRecord; fRenderer.PolyLine(polyLine.aptl); break; case GDI32.EMR_EXTTEXTOUTA: case GDI32.EMR_EXTTEXTOUTW: EMREXTTEXTOUTA textout = (EMREXTTEXTOUTA)aRecord; fRenderer.DrawString(textout.emrtext.ptlReference.x, textout.emrtext.ptlReference.y, textout.emrtext.text); break; case GDI32.EMR_GDICOMMENT: case GDI32.EMR_FILLRGN: case GDI32.EMR_FRAMERGN: case GDI32.EMR_INVERTRGN: case GDI32.EMR_PAINTRGN: case GDI32.EMR_EXTSELECTCLIPRGN: case GDI32.EMR_ALPHABLEND: case GDI32.EMR_STRETCHBLT: case GDI32.EMR_MASKBLT: case GDI32.EMR_PLGBLT: case GDI32.EMR_SETDIBITSTODEVICE: case GDI32.EMR_STRETCHDIBITS: case GDI32.EMR_TRANSPARENTBLT: case GDI32.EMR_POLYBEZIERTO: case GDI32.EMR_POLYPOLYGON: case GDI32.EMR_POLYLINETO: case GDI32.EMR_POLYPOLYLINE: case GDI32.EMR_CREATEMONOBRUSH: case GDI32.EMR_CREATEDIBPATTERNBRUSHPT: case GDI32.EMR_EXTCREATEPEN: case GDI32.EMR_EXTCREATEFONTINDIRECTW: case GDI32.EMR_POLYTEXTOUTA: case GDI32.EMR_POLYTEXTOUTW: case GDI32.EMR_SETICMMODE: case GDI32.EMR_CREATECOLORSPACE: case GDI32.EMR_SETCOLORSPACE: case GDI32.EMR_DELETECOLORSPACE: case GDI32.EMR_GLSRECORD: case GDI32.EMR_GLSBOUNDEDRECORD: case GDI32.EMR_PIXELFORMAT: case GDI32.EMR_COLORCORRECTPALETTE: case GDI32.EMR_SETICMPROFILEA: case GDI32.EMR_SETICMPROFILEW: case GDI32.EMR_SETLAYOUT: case GDI32.EMR_GRADIENTFILL: case GDI32.EMR_COLORMATCHTOTARGETW: case GDI32.EMR_CREATECOLORSPACEW: // These will likely never show up case GDI32.EMR_RESERVED_105: case GDI32.EMR_RESERVED_106: case GDI32.EMR_RESERVED_107: case GDI32.EMR_RESERVED_108: case GDI32.EMR_RESERVED_109: case GDI32.EMR_RESERVED_110: case GDI32.EMR_RESERVED_117: case GDI32.EMR_RESERVED_119: case GDI32.EMR_RESERVED_120: // Probably no real need to implement these case GDI32.EMR_POLYBEZIER16: case GDI32.EMR_POLYBEZIERTO16: case GDI32.EMR_POLYGON16: case GDI32.EMR_POLYPOLYGON16: case GDI32.EMR_POLYLINE16: case GDI32.EMR_POLYLINETO16: case GDI32.EMR_POLYPOLYLINE16: case GDI32.EMR_POLYDRAW16: default: if (CommandReceived != null) CommandReceived(aRecord); break; } }