终于找到了很重要的库VisioUtility—-找了好久—在VisioLibrary.cs
以下是链接
链接:https://pan.baidu.com/s/1QGOLjn4yBGHCkjZoNDhoeA
参考链接:
https://blog.csdn.net/xuexue_wang/article/details/10943629?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3
伍华聪
https://www.cnblogs.com/wuhuacong/archive/2008/05/30/1210525.html
利用VisioUtility可以得到AxDrawingControl中鼠标点击时间下点击的形状Shape
private void axDrawingControl1_MouseDownEvent(object sender, AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseDownEvent e)
{
try
{
if (IsVisioEditable)
{
if (cbMasters.EditValue != null)
{
string s = string.Format("x:{0},y:{1}", e.x, e.y);
string shapename = cbMasters.EditValue.ToString().Trim();
if (!string.IsNullOrEmpty(shapename))
{
Visio.Shape shape = axDrawingControl1.Document.Pages[1].Drop(currentStencil.Masters[shapename], e.x, e.y);
}
}
}
Shape shp = VisioUtility.GetClickedShape(axDrawingControl1, e.x,e.y);
//XtraMessageBox.Show(VisioUtility.MapVisioToWindows(axDrawingControl1, e.x, e.y));
if (shp != null)
{
var point = Topo.Points.Find(a => a.VisioIndex == shp.Index);
//string message = string.Format("点编号{0},类型{1}", point.ID, point.pointType.ToString());
string message = shp.NameU;
InfoEdits.Point p = new InfoEdits.Point();
string ms = "";
InfoEdits.Track t = new InfoEdits.Track();
if (message.Contains("Signal"))
{
p = Topo.Signals.Find(a => a.VisioIndex == shp.Index);
t = Topo.Tracks.Find(a => a.ID == p.TrackID);
ms = string.Format("SignalName ={0} DeltaPos ={1}m", p.Tag, p.DeltaPos);
ms += "\r\n" + string.Format("X ={0},Y ={1}", p.X, p.Y);
ms += "\r\n" + string.Format("Lng ={0}, Lat={1}", p.Lon, p.Lat);
ms += "\r\n" + string.Format("TrackName ={0}, TrackType ={1}", t.Name, t.Type.ToString());
}
else if (message.Contains("Balise"))
{
p = Topo.Balises2.Find(a => a.VisioIndex == shp.Index);
t = Topo.Tracks.Find(a => a.ID == p.TrackID);
ms = string.Format("BaliseName ={0} DeltaPos ={1}m", p.Tag, p.DeltaPos);
ms += "\r\n" + string.Format("X ={0}, Y ={1}", p.X, p.Y);
ms += "\r\n" + string.Format("Lng ={0}, Lat={1}", p.Lon, p.Lat);
ms += "\r\n" + string.Format("TrackName ={0}, TrackType ={1}", t.Name,t.Type.ToString());
}
else if (message.Contains("Joint"))
{
p = Topo.Points.Find(a => a.VisioIndex == shp.Index);
t = Topo.Tracks.Find(a => a.ID == p.TrackID);
ms = string.Format("ID ={0} DeltaPos ={1}m DeltaBear ={2}", p.ID, p.DeltaPos, p.DeltaBear);
ms += "\r\n" + string.Format("X ={0}, Y ={1}", p.X, p.Y);
ms += "\r\n" + string.Format("Lng ={0}, Lat={1}", p.Lon, p.Lat);
ms += "\r\n" + string.Format("TrackName ={0}, TrackType ={1}", t.Name, t.Type.ToString());
}
if (!string.IsNullOrEmpty(ms))
{
toolTipController1.ShowHint(ms, DevExpress.Utils.ToolTipLocation.RightCenter);
}
}
else
{
}
}
catch(Exception ex)
{
WriteLog(ex.Message);
}
}
private void repositoryItemComboBox3_SelectedIndexChanged(object sender, EventArgs e)
{
DoVisioCmds(barEditItem3.EditValue.ToString());
}
/// <summary>
/// 执行Visio的命令
/// </summary>
/// <param name="s"></param>
private void DoVisioCmds(string s)
{
switch (s)
{
case "形状窗口":
visApp.DoCmd((short)VisUICmds.visCmdShapesWindow);
break;
case "属性数据窗口":
visApp.DoCmd((short)VisUICmds.visCmdCustProp);
break;
case "平移和缩放":
visApp.DoCmd((short)VisUICmds.visCmdPanZoom);
break;
case "显示隐藏标尺":
visApp.DoCmd((short)VisUICmds.visCmdViewRulers);
break;
case "显示隐藏网格":
visApp.DoCmd((short)VisUICmds.visCmdViewGrid);
break;
case "大小和位置":
visApp.DoCmd((short)VisUICmds.visCmdSizePos);
break;
default:
break;
}
}