您的位置:首页 > 编程语言 > C#

学习C#操纵Visio之二:响应鼠标事件

2010-04-18 08:54 489 查看
上一个程序已经可以形成动画效果。本节将讲述如何响应鼠标,例如响应鼠标左键,在笑脸上按一下就变脸,笑脸变哭脸,哭脸变笑脸。
Visio提供了鼠标处理事件,可以在C#中直接定义响应函数,然后就可以在程序中响应Visio的鼠标事件。
例如:
EApplication_MouseDownEventHandler ameh;
ameh = new EApplication_MouseDownEventHandler(m_App_MouseDown);
m_App.MouseDown +=ameh; /* 增加mouse事件处理 */

在Visio的ApplicationClass中,MouseDown事件响应函数是这样的public void m_App_MouseDown(int Button, int KeyButtonState, double x, double y, ref bool CancelDefault)。这个函数可以简单的在VisioSDK的手册中轻易找到。

剩下的事情就挺简单的,首先判断一下这个按键在哪里发生的。VisioSDK提供了一个强劲的工具:HitTest,在shape上可以很容易判断出是否在Shape内部按的按键。

/* ------------------------------------------------------------------ */
/* 处理鼠标按下的事件 */
public void m_App_MouseDown(int Button, int KeyButtonState, double x, double y, ref bool CancelDefault)
{
Shape sp;
int i;
Cell ce;
if (Button != (int)VisKeyButtonFlags.visMouseLeft)
return;
CancelDefault = true;
for (i = 1; i <= m_Doc.Pages[1].Shapes.Count; i++)
{
sp = m_Doc.Pages[1].Shapes[i];
if (sp.HitTest(x, y, 0.1) == (Int16)VisHitTestResults.visHitInside)
{
ce = sp.get_CellsSRC((short)VisSectionIndices.visSectionProp, 0, 0);
if ((ce.Formula == "/"CUSTID1/"") ||
(ce.Formula == "/"CUSTID2/""))
{
sp.SendToBack();
}
}
}
}
/* ------------------------------------------------------------------ */
/* 打开D:/TestVisio/TestCase01.vsd,根据鼠标按键切换显示,15秒之后程序退出 */
public void TestCase01Part2()
{
bool m_bRet;
EApplication_MouseDownEventHandler ameh;

m_Gvar = new CGvars();
m_bRet = m_Gvar.OpenVisioDocument("D://TestVisio//TestCase01.vsd", (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenCopy);
if (m_bRet == false)
return;
m_App = m_Gvar.GetApplicationClass();
m_Doc = m_Gvar.GetDocument();
try
{
/* 切换到全屏 */
m_App.DoCmd((short)VisUICmds.visCmdFullScreenMode);

ameh = new EApplication_MouseDownEventHandler(m_App_MouseDown);
m_App.MouseDown +=ameh; /* 增加mouse事件处理 */
Thread.Sleep(15000); /* 15秒之后程序退出 */
m_App.MouseDown -= ameh; /* 删去mouse事件处理(避免visio在响应鼠标事件时,事件响应程序退出的错误) */

m_Doc.Saved = true; // 防止关闭弹出保存对话框
}
finally
{
m_Doc.Close();
m_App.Quit();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: