求助:如何将两个打开的dwg窗口左右均布
想将两个打开的dwg窗口左右均布,用vla-put-widt可以改变窗口大小:
(setqAcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument Acadobject)
Application(vla-get-Application Acaddocument)
)
(setq w1 (vla-get-width AcadDocument))
(vla-put-width AcadDocument (* 0.5 w1))
但是窗口定位却无法实现,
用vla-put-windowtop 和vla-put-windowleft只能改变整个acad窗口的位置
(vla-put-windowtop Application 0)
(vla-put-windowleft Application w1) 本帖最后由 Qwer1243 于 2021-8-24 15:46 编辑
xiaoyingzi 发表于 2012-8-31 08:55(vl-load-com)
(defun c:docwinleft (/ app doc wrap hwnd w1 h1)
下面是我的要实现图片展示和代码,再次感谢楼主和高飞鸟大师C:\Users\Administrator\Desktop\jdfw.gif
;;;----------------------
;;;;;;;;;不对称分屏;;;;;;
;;;----------------------
(defun c:sp ()
(vl-load-com)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-activedocument AcadObject)
mSpace (vla-get-modelspace AcadDocument)
wrap (vlax-create-object "DynamicWrapperX") ;创建DynamicWrapperX对象
)
(vlax-invoke wrap 'Register "USER32" "MoveWindow" "i=llllll" "r=l") ;注册MoveWindow函数
(setq DocumentSel (vla-get-documents AcadObject))
(command "syswindows" "V")
(vlax-for Document DocumentSel
(setq hwnd (vla-get-hwnd Document)) ;当前文档句柄
(if (equal Document (vla-get-activedocument AcadObject))
(vlax-invoke wrap 'MoveWindow hwnd 600 0 1255 784 1)
(vlax-invoke wrap 'MoveWindow hwnd 0 0 600 784 1)
)
)
(vlax-release-object wrap)
(princ)
) xiaoyingzi 发表于 2012-8-31 08:55
(vl-load-com)
(defun c:docwinleft (/ app doc wrap hwnd w1 h1)
找了好几天相关的资料,今天终于找到了 非常感谢你提供了思路和灵感 也感谢高飞鸟大师 edsion24 发表于 2021-8-25 08:55
执行不起来啊
看这个帖子http://bbs.mjtd.com/forum.php?mod=viewthread&tid=186586&page=1&extra=#pid937834 本帖最后由 xiaoyingzi 于 2011-8-12 19:15 编辑
用纯lisp好像不好解决,终于用lisp下调用api解决,
(vl-load-com)
(defun c:11 (/ app doc wrap hwnd w1 h1)
(setq app (vlax-get-acad-object)) ;CAD程序对象
(setq doc (vla-get-ActiveDocument app)) ;当前文档对象
(setq wrap (vlax-create-object "DynamicWrapperX")) ;创建DynamicWrapperX对象
(setq hwnd (vla-get-hwnd doc)) ;当前文档句柄
(vla-put-windowState doc 3) ;当前文档窗口最大化
(setq w1 (fix (* 0.5 (vla-get-width doc)))) ;设w1为当前文档窗口宽度的一半
(setq h1 (fix (vla-get-Height doc))) ;设h1为当前文档窗口高度
(vla-put-windowState doc 1)
(vlax-invoke wrap 'Register "USER32" "MoveWindow" "i=llllll" "r=l");注册MoveWindow函数
(vlax-invoke wrap 'MoveWindow hwnd 0 -20 w1 h1 1) ;移动当前文档窗口,并改窗口宽度为最大化时的一半
(vlax-release-object wrap)
(princ)
)
本帖最后由 半听可乐 于 2012-8-30 20:06 编辑
xiaoyingzi 发表于 2011-8-11 23:09 http://bbs.mjtd.com/static/image/common/back.gif
用纯lisp好像不好解决,终于用lisp下调用api解决,
(vl-load-com)
(defun c:11 (/ app doc wrap hwnd w1...
这个好像实现不了哦 (vl-load-com)
(defun c:docwinleft (/ app doc wrap hwnd w1 h1)
(setq app (vlax-get-acad-object)) ;CAD程序对象
(setq doc (vla-get-ActiveDocument app)) ;当前文档对象
(setq wrap (vlax-create-object "DynamicWrapperX")) ;创建DynamicWrapperX对象
(setq hwnd (vla-get-hwnd doc)) ;当前文档句柄
(vla-put-windowState doc 3) ;当前文档窗口最大化
(setq w1 (fix (* (vla-get-width doc) 0.5))) ;设w1为当前文档窗口宽度的一半
(setq h1 (fix (vla-get-Height doc))) ;设h1为当前文档窗口高度
(vla-put-windowState doc 1) ;当前文档窗口正常
(vlax-invoke wrap 'Register "USER32" "MoveWindow" "i=llllll" "r=l");注册MoveWindow函数
(vlax-invoke wrap 'MoveWindow hwnd -4 -25 (+ w1 7) h1 1) ;移动当前文档窗口至左侧,并改窗口宽度为最大化时的一半
(vlax-release-object wrap)
(princ)
)
(defun c:docwinright (/ app doc wrap hwnd w1 h1)
(setq app (vlax-get-acad-object)) ;CAD程序对象
(setq doc (vla-get-ActiveDocument app)) ;当前文档对象
(setq wrap (vlax-create-object "DynamicWrapperX")) ;创建DynamicWrapperX对象
(setq hwnd (vla-get-hwnd doc)) ;当前文档句柄
(vla-put-windowState doc 3) ;当前文档窗口最大化
(setq w1 (fix (* (vla-get-width doc) 0.5))) ;设w1为当前文档窗口宽度的一半
(setq h1 (fix (vla-get-Height doc))) ;设h1为当前文档窗口高度
(vla-put-windowState doc 1) ;当前文档窗口正常
(vlax-invoke wrap 'Register "USER32" "MoveWindow" "i=llllll" "r=l");注册MoveWindow函数
(vlax-invoke wrap 'MoveWindow hwnd (- w1 3) -25 (+ w1 3) h1 1) ;移动当前文档窗口至右侧,并改窗口宽度为最大化时的一半
(vlax-release-object wrap)
(princ)
)
(defun c:docwinmax( / app doc)
(setq app (vlax-get-acad-object)) ;CAD程序对象
(setq doc (vla-get-ActiveDocument app)) ;当前文档对象
(vla-put-windowState doc 3) ;当前文档窗口最大化
(princ)
)
(defun c:docwinsize( / app doc w1 h1 w h)
(setq w (getint "\n输入宽:"))
(setq h (getint "\n输入高:"))
(setq app (vlax-get-acad-object)) ;CAD程序对象
(setq doc (vla-get-ActiveDocument app)) ;当前文档对象
(vla-put-width doc w) ;修改当前文档窗口跨度为w
(vla-put-height doc h) ;修改当前文档窗口高度为h
(princ)
) 其实用acad自带命令syswindows也可很方便的实现,不过窗口还有标题栏 上面程序要注册dynwrapx.dll,具体可看高飞鸟大大的帖子,所以从实用性来说还是acad自带命令比较好 docwinleftdocwinright 这两个命令执行后都报错:参数类型错误: VLA-OBJECT nil
已经加载(vl-load-com)
程序执行完后返回syswindows已经得到的结果
不知何故 本帖最后由 xiaoyingzi 于 2012-8-31 09:56 编辑
xiaxiang 发表于 2012-8-31 09:06 http://bbs.mjtd.com/static/image/common/back.gif
docwinleftdocwinright 这两个命令执行后都报错:参数类型错误: VLA-OBJECT nil
已经加载(vl-load-com)...
上面程序要注册dynwrapx.dll,程序实现效果:
自带命令syswindows也可很方便的实现,不过窗口还有标题栏,效果如下
这个东西用处有限,节省不了多少时间。
能不能像下面一样做一个,估计会比较方便:
比如,同时开了9个文件,我只想让其中的2个或N个文件均布于窗口。
我的这个思路看是否可以行:
输入命令后,立即出现一个对话框,这个对话框显示所有打开的文件的列表。然后勾选2个或3个文件均布与窗口。
页:
[1]
2