我可以在system.drawing中添加一个控件,例如按钮吗?

Ado*_*eVB 5 c# system.drawing winforms gmap.net

    using System.Drawing;
    using System.Drawing.Drawing2D;

    namespace WindowsFormsApplication1
    {      
        [Serializable]
        public class GMapBaloonTool: GMapToolTip, ISerializable
        {
            public float Radius = 10f;   
            public GMapBaloonTool(GMapMarker marker)
                : base(marker)
            {
                Stroke = new Pen(Color.FromArgb(140, Color.Navy));
                Stroke.Width = 3;
                this.Stroke.LineJoin = LineJoin.Round;
                this.Stroke.StartCap = LineCap.RoundAnchor;    
                Fill = Brushes.Pink;
            }
Run Code Online (Sandbox Code Playgroud)

上面的代码,使工具提示改变其颜色.
在此输入图像描述

我正在使用gMaps.net在winforms C#中创建自定义谷歌地图.我正在努力添加一个标记+ onClick事件,它将显示来自DVR的视频输入.
唯一的问题是,内置的GMapsToolTip只显示字符串,虽然我有一个activeX作为摄像头的控件.
我需要的是在工具提示中显示相机(activeX).在伟大的地图上的论坛上
看到这个.创作者说我可以制作自定义工具提示.
所以我要问的是,是否可以使用此system.drawing命名空间创建/添加控件?
如果可能的话,请告诉我如何......
如果不知道,如果你知道其他任何方式,请告诉我.

            public override void OnRender(Graphics g)
            {
                System.Drawing.Size st = g.MeasureString(Marker.ToolTipText, Font).ToSize();
                System.Drawing.Rectangle rect = new System.Drawing.Rectangle(Marker.ToolTipPosition.X, Marker.ToolTipPosition.Y - st.Height, st.Width + TextPadding.Width, st.Height + TextPadding.Height);
                rect.Offset(Offset.X, Offset.Y);    
                using (GraphicsPath objGP = new GraphicsPath())
                {
                    objGP.AddLine(rect.X + 2 * Radius, rect.Y + rect.Height, rect.X + Radius, rect.Y + rect.Height + Radius);
                    objGP.AddLine(rect.X + Radius, rect.Y + rect.Height + Radius, rect.X + Radius, rect.Y + rect.Height);

                    objGP.AddArc(rect.X, rect.Y + rect.Height - (Radius * 2), Radius * 2, Radius * 2, 90, 90);
                    objGP.AddLine(rect.X, rect.Y + rect.Height - (Radius * 2), rect.X, rect.Y + Radius);
                    objGP.AddArc(rect.X, rect.Y, Radius * 2, Radius * 2, 180, 90);
                    objGP.AddLine(rect.X + Radius, rect.Y, rect.X + rect.Width - (Radius * 2), rect.Y);
                    objGP.AddArc(rect.X + rect.Width - (Radius * 2), rect.Y, Radius * 2, Radius * 2, 270, 90);
                    objGP.AddLine(rect.X + rect.Width, rect.Y + Radius, rect.X + rect.Width, rect.Y + rect.Height - (Radius * 2));
                    objGP.AddArc(rect.X + rect.Width - (Radius * 2), rect.Y + rect.Height - (Radius * 2), Radius * 2, Radius * 2, 0, 90); // Corner

                    objGP.CloseFigure();    
                    g.FillPath(Fill, objGP);
                    g.DrawPath(Stroke, objGP);
                }

                g.DrawString(Marker.ToolTipText, Font, Foreground, rect, Format);    
         g.DrawString(ToolTipText, ToolTipFont, TooltipForeground, rect, ToolTipFormat);    
            }

            #region ISerializable Members    
            void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
            {
                info.AddValue("Radius", this.Radius);    
                base.GetObjectData(info, context);
            }

            protected GMapBaloonTool(SerializationInfo info, StreamingContext context)
                : base(info, context)
            {
                this.Radius = Extensions.GetStruct<float>(info, "Radius", 10f);
            }    
            #endregion
        }       
    }
Run Code Online (Sandbox Code Playgroud)

这段代码使气球呈圆形,所以我不知道如何添加我的控件看起来像这样...... (由html制作,但我需要在winforms上)

在此输入图像描述

希望有人可以帮助我.哦,如果你只是将我重定向回到伟大地图的讨论网站,请不要.我从那里听不懂,所以我在这里问道.

Lua*_*aan 1

您可以尝试在相机控件上使用 DrawToBitmap 方法。我预计会发生以下三件事之一:

  • 你会得到一个黑色矩形
  • 在调用 DrawToBitmap 时,您会获得相机的一帧
  • 您可以获得实时视频源(得益于叠加视频播放功能)

最好的选择是 2 和 3,因为它们可用于提供您想要的功能。如果您得到数字 1,则控件渲染不使用 Winforms 的常用渲染逻辑,因此您必须解决它。

在实践中,您可能需要更直接地访问相机渲染输出,因为每秒创建 25 个位图可能有点太多的工作而没有用处。你会到达那里:)