C# 我是否可以在system.drawing中添加控件,例如按钮?

C# 我是否可以在system.drawing中添加控件,例如按钮?,c#,winforms,system.drawing,gmap.net,C#,Winforms,System.drawing,Gmap.net,上述代码使工具提示更改其颜色。 我正在使用winforms C#创建自定义谷歌地图。我正在努力添加marker+onClick事件,该事件将显示来自DVR的视频源。 唯一的问题是,内置的gmaptooltip只显示字符串,尽管我有一个activeX控件作为相机的控件。 我需要的是在工具提示中显示摄像头(activeX)。 在greatmaps论坛上看到。创建者说我可以自定义工具提示。 所以我要问的是,是否可以使用system.drawing命名空间创建/添加控件 如果可能,请告诉我如何…… 如

上述代码使工具提示更改其颜色。

我正在使用winforms C#创建自定义谷歌地图。我正在努力添加marker+onClick事件,该事件将显示来自DVR的视频源。
唯一的问题是,内置的gmaptooltip只显示字符串,尽管我有一个activeX控件作为相机的控件。
我需要的是在工具提示中显示摄像头(activeX)。
在greatmaps论坛上看到。创建者说我可以自定义工具提示。
所以我要问的是,是否可以使用system.drawing命名空间创建/添加控件
如果可能,请告诉我如何……
如果没有,如果你知道任何其他的方式,让它知道

    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;
            }
public override void OnRender(图形g)
{
System.Drawing.Size st=g.MeasureString(Marker.ToolTipText,Font.ToSize();
System.Drawing.Rectangle rect=新的系统.Drawing.Rectangle(Marker.ToolTipPosition.X,Marker.ToolTipPosition.Y-标准高度、标准宽度+文本填充宽度、标准高度+文本填充高度);
矩形偏移(偏移量X,偏移量Y);
使用(GraphicsPath objGP=new GraphicsPath())
{
对象添加行(矩形X+2*半径,矩形Y+矩形高度,矩形X+半径,矩形Y+矩形高度+半径);
对象添加行(矩形X+半径,矩形Y+矩形高度+半径,矩形X+半径,矩形Y+矩形高度);
对象添加弧(矩形X,矩形Y+矩形高度-(半径*2),半径*2,半径*2,90,90);
对象添加行(矩形X,矩形Y+矩形高度-(半径*2),矩形X,矩形Y+半径);
对象添加弧(矩形X、矩形Y、半径*2、半径*2、180、90);
对象添加行(矩形X+半径,矩形Y,矩形X+矩形宽度-(半径*2),矩形Y);
对象添加弧(矩形X+矩形宽度-(半径*2),矩形Y,半径*2,半径*2,270,90);
对象添加行(矩形X+矩形宽度,矩形Y+半径,矩形X+矩形宽度,矩形Y+矩形高度-(半径*2));
对象添加弧(矩形X+矩形宽度-(半径*2),矩形Y+矩形高度-(半径*2),半径*2,半径*2,0,90);//角
objGP.CloseFigure();
g、 FillPath(Fill,objGP);
g、 牵引路径(行程,objGP);
}
g、 抽绳(Marker.ToolTipText、字体、前景、矩形、格式);
g、 抽绳(ToolTipText、ToolTipFont、TooltipForeground、rect、ToolTipFormat);
}
#区域ISerializable成员
void ISerializable.GetObjectData(SerializationInfo信息,StreamingContext上下文)
{
info.AddValue(“半径”,此为.Radius);
base.GetObjectData(信息、上下文);
}
受保护的gmapbalool(SerializationInfo信息、StreamingContext上下文)
:base(信息、上下文)
{
this.Radius=Extensions.GetStruct(信息,“Radius”,10f);
}    
#端区
}       
}
这段代码使气球呈圆形,所以我不知道如何添加控件使其看起来像这样(由html制作,但我需要在winforms上使用)

希望有人能帮助我。
哦,如果你只想把我重定向回greatmaps的讨论网站,请不要。我无法从那里了解太多,所以我在这里询问。

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

  • 你得到一个黑色的长方形
  • 在你调用DrawToBitmap的那一刻,你得到了相机的一帧
  • 您将获得一个实时视频源(多亏了叠加视频播放功能)
你最好的选择是2号和3号,因为它们可以用来提供你想要的功能。如果得到1,则控件渲染不使用Winforms的常规渲染逻辑,因此必须解决此问题


实际上,您可能希望更直接地访问摄影机渲染输出,因为每秒创建25个位图可能会有点太多的工作而没有用处。你会到达那里:)

我已经有了这个工作。使用窗体实例创建信息窗口
是链接。

在winforms中自定义工具提示可以通过自定义
ToolStripControlHost
来实现,您应该尝试在其上搜索,在当前项目之外进行一些演示,以便在应用于项目之前查看其作用。那里有很多样品。关键是,您必须知道如何以及何时在地图上的某个点显示工具提示。
            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
        }       
    }