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的那一刻,你得到了相机的一帧
- 您将获得一个实时视频源(多亏了叠加视频播放功能)
实际上,您可能希望更直接地访问摄影机渲染输出,因为每秒创建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
}
}