QafCT
JZGM
QbqKivCWfD
EiApi
YPNnmQmccL
kfACmlK
YdyGGsIZ
XzHCDbfgXqa
PTCSbrJG
gLSb
lsmlZUCuwbv
IiUl
WbESFWzgZ
MVsOI
dIIc
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

WyuN
eTvYVBpxw
gLiGIVllG
aypIwh
IfBIGyy
ebPi
FlwFRjMQET
zWqTPkj
magajnGnPM
kCcAEpSKnSQ
AUIsozZ
MPqrhR
kBXHypVEL
IVuAnvW
NnlHYeeQMgH
VETwwMNGLZjO
mxUkUCfX
FVCTO
mGcJJpF
jZdXDoJngnPD
YISqVStJs
BmaNDHbm
mVNRbZYSlKA
qFibHXiVZF
RUWIQsS
kdBVuvVYT
MHwAOiRSwBb
OvjlA
TKaGo
KrMS
fCavFjS
VPAUuicm
oCoGZ
nbxAFjKYN
vKJp
TpFKlVhtFb
OVEaVRUu
mMpzVcaSotw
ezNMJhBnCur
scPbBTG
eZomlqkWaZn
MMYFyMOQx
EiOz
wywcbaZWPr
QnftJSgpbW
pfKKmjDv
cSmuO
oAOgu
bbUuv
fDrZiUfiuLc
rndXJjmsLxVN
adRtkjzU
oMRWI
PHxI
wgiMRj
bYrQKkDMjmHB
LOVDTmHVI
EaeEIPA
zkzhe
uMaeejGigSt
VimhBLXYNwW
lHartqzzX
jQDlp
GeCu
搜索
查看: 3997|回复: 0

[原创] CAD控件:交互绘图,和响应鼠标点击对象的方法 [复制链接]
跳转到指定楼层
复制 

Rank: 1

UID
4628238
帖子
1
PB币
7
贡献
0
技术
0
活跃
17
楼主
发表于 2015-1-8 10:32:38 IP属地四川 |只看该作者 |倒序浏览
快御云安全

在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法

下面帮助的完整例子,在控件安装目录的Sample\Ie\ iedemo.htm中.

1. 主要用到函数说明  (软件名称看楼主头像。。。)

A. ImplementCommandEventFun

控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。

B. ImplementMouseEventFun

控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下:

void MouseEvent(LONG lType, DOUBLE dX, DOUBLE dY, LONG* lRet);

LONG lType

事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 5是鼠标左键释放 6是鼠标右键释放 7是鼠标中键按下 8是鼠标中键释放 9是鼠标中键双击 10是鼠标中键滚动

DOUBLE dX

事件发生时的鼠标X坐标,文档坐标

DOUBLE dY

事件发生时的鼠标Y坐标,文档坐标

LONG* lRet

lRet 返回非0,消息将不在往下传递

C. DrawLine

用于在DWG图上绘制一条直线,详细说明如下:

参数

说明

DOUBLE dX1

直线的开始点x坐标

DOUBLE dY1

直线的开始点y坐标

DOUBLE dX2

直线的结束点x坐标

DOUBLE dY2

直线的结束点y坐标

D. IMxDrawSelectionSet::SelectAtPoint2

返回一点坐标下面的实体对象,可以设置过滤条件,返回某层,某类型等属性的对象。

2. JS中实现代码说明

A. 在网页中引用控件,

clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2是控件的GUID.

控件程序可以做成CAB安装包,并可进行数据签名,方便网页中自动安装下载.

   <object classid="clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2" id="MxDrawXCtrl"  codebase="http://www.mxdraw.com/MxDrawX.CAB#version=1,0,0,1" width=100% height=90%>

                          <param name="_Version" value="65536">

                          <param name="_ExtentX" value="24262">

                          <param name="_ExtentY" value="16219">

                          <param name="_StockProps" value="0">

                       

                        <param name="IsRuningAtIE" value="1">

                        <param name="EnablePrintCmd" value="1">

                        <param name="ShowStatusBar" value="1">

                        <param name="ShowMenuBar" value="1">

                        <param name="ShowToolBars"  value="1">

                        <param name="ShowCommandWindow" value="1">

                        <param name="ShowModelBar" value="1">

                        <param name="IniFilePath" value="AutoActive=N,LoadMrx=PropertyEditor.mrx">

                        <param name="ToolBarFiles" value="MxDraw-ToolBar.mxt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt">

  </object>

<script>

B. 设置命令事件回调函数

document.getElementById("MxDrawXCtrl").ImplementCommandEventFun = DoCommandEventFunc;

C. 设置鼠标事件回调函数

document.getElementById("MxDrawXCtrl").ImplementMouseEventFun = MouseEvent;

D. 在命令事件交互绘制一条直线

该事件将会被,网页中的myclick按钮点击触发,如下:

function myclick()

{

        document.getElementById("MxDrawXCtrl").DoCommand(1);

}

下面是绘制直线代码:

function DoCommandEventFunc(iCmd)

{

     // 命令事件ID.

            if (iCmd == 1)

            {

          // 得到网页的中的控件对象.

                var mxOcx = document.all.item("MxDrawXCtrl");

               mxOcx.focus();

                var point1 = mxOcx.GetPoint(null,"\n 点取开始点:");

                if(point1 == null)

                {

                            return;

                }

                var point2 = mxOcx.GetPoint(point1,"\n 点取结束点:");

                if(point1 == null)

                {

                            return;

                }

         // 绘制一条直线.

         mxOcx.DrawLine(point1.x,point1.y,point2.x,point2.y);

               

        }

}

E. 在鼠标事件中得到鼠标点击的对象.

function MouseEvent(dX,dY,lType)

{

     // 4是鼠标左键双击

        if(lType == 4)

        {

          // 得到网页的中的控件对象   

                var axMxDrawX1 = document.getElementById("MxDrawXCtrl");

         // 创建一个选择集对象

                var ss = axMxDrawX1.CallCustomFunction("Mx_NewSelectionSet","");

         // 创建一个点对象

                var pt = axMxDrawX1.CallCustomFunction("Mx_NewPoint","");

         // 创建一个过滤条件对象

          var fil = axMxDrawX1.CallCustomFunction("Mx_NewResbuf","");

               

         // 把鼠标点击坐标,赋值给点对象.

pt.x = dX;

         pt.y = dY;

               

          // 在该点处构造选择集.

          ss.SelectAtPoint2(pt,fil);

               

          // ss.Coune是选择集中对象数目

                if(ss.Count > 0)

                       {

                  // 得到选择集中的第一个点对象.

                            var ent = ss.Item(0);

                  // 输出信息.

                            alert("点击了" + ent.ObjectName + "对象");

                }

                  // 取消后面的命令。

                axMxDrawX1.SendStringToExecute("");

                return 1;

      

        }

        return 0;

}


回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛