// create overlay manager OverlayManager overlayManager; RecreateOverlayManager(); overlayManager.Update(); // part which handles gauge packets gauge = "received gauge"; overlayManager.Update(); // update calls the rendercallback which uses the gauge object to draw the gauge #region overlay /* static void RenderCallback(DirectDraw.Device device, DirectDraw.Surface overlaySurface) { IntPtr dc = overlaySurface.GetDc(); try { if (gauge != null) { System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHdc(dc); //graphics.DrawString("This is an overlay!", new System.Drawing.Font("Arial", 12.0f), System.Drawing.Brushes.White, 10, 10); graphics.DrawImage(new Bitmap(new Bitmap("test.png"), new Size(262, 265)), new Point(0, 0)); graphics.DrawString(string.Format("{0:00000}", gauge.RPM), new Font("Arial", 20.0f), new SolidBrush(Color.Red), new RectangleF(new PointF(124f, 155f), new SizeF(113f, 32f))); graphics.DrawString((gauge.Speed * 3.6).ToString(), new Font("Arial", 20.0f), new SolidBrush(Color.Red), new RectangleF(new PointF(123f, 199f), new SizeF(80f, 32f))); graphics.FillRectangle(new SolidBrush(Color.LightGreen), new Rectangle(new Point(4, 243), new Size(Convert.ToInt16(gauge.Throttle * 118), 18))); graphics.FillRectangle(new SolidBrush(Color.LightPink), new Rectangle(new Point(125, 243), new Size(Convert.ToInt16(gauge.Brake * 118), 18))); graphics.DrawString("Throttle", new Font("Arial", 15.0f), new SolidBrush(Color.DarkGray), new RectangleF(new PointF(4f, 240f), new SizeF(111f, 18f))); graphics.DrawString("Brake", new Font("Arial", 15.0f), new SolidBrush(Color.DarkGray), new RectangleF(new PointF(125f, 240f), new SizeF(111f, 18f))); // draw gauge Pen RpmPen; float angle = 35; maxrpm = 11000; Font RpmFont = new Font("Impact", 10); Brush Rpmbrush; // draw 0-line graphics.TranslateTransform(131, 131); // set center of all rotations graphics.RotateTransform(angle); // 0 is at 48° for (int rpm = 0; rpm <= maxrpm; rpm += 500) { if (rpm > (maxrpm - 2000)) { RpmPen = new Pen(Color.Red, 3); Rpmbrush = new SolidBrush(Color.Red); } else { RpmPen = new Pen(Color.DarkSlateGray, 3); Rpmbrush = new SolidBrush(Color.DimGray); } angle = (rpm / maxrpm) * 220; graphics.RotateTransform(angle); if (rpm % 1000 == 0) { graphics.DrawLine(RpmPen, new Point(0, 105), new Point(0, 120)); graphics.DrawString((rpm / 1000).ToString(), RpmFont, Rpmbrush, new PointF(0, 80)); } else { graphics.DrawLine(RpmPen, new Point(0, 110), new Point(0, 120)); } graphics.RotateTransform(-angle); } angle = (gauge.RPM / maxrpm) * 220; Pen pen = new Pen(Color.Red, 5); pen.StartCap = System.Drawing.Drawing2D.LineCap.Triangle; pen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; graphics.RotateTransform(angle); graphics.DrawLine(pen, new Point(0, 0), new Point(0, 100)); graphics.RotateTransform(- angle); } } finally { overlaySurface.ReleaseDc(dc); } } void RecreateOverlayManager() { if (overlayManager != null) { overlayManager.Dispose(); overlayManager = null; } try { overlayManager = new OverlayManager(new OverlayRenderCallback(RenderCallback)); if (overlayManager.IsHardwareSupportAvailable) { overlayManager.Initialize(); } else { Console.WriteLine( "No hardware support for overlays or the maximum number of visible overlays has been reached"); } } catch (Exception ex) { Console.WriteLine("Failed to initialize the overlay manager: " + ex.ToString()); } } */ #endregion