明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4026|回复: 13

[讨论] 求助:如何将两个打开的dwg窗口左右均布

[复制链接]
发表于 2011-8-9 12:12:34 | 显示全部楼层 |阅读模式
想将两个打开的dwg窗口左右均布,
用vla-put-widt可以改变窗口大小:
(setq  AcadObject   (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)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-8-24 15:40:49 | 显示全部楼层
本帖最后由 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)
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2021-8-24 15:29:23 | 显示全部楼层
xiaoyingzi 发表于 2012-8-31 08:55
(vl-load-com)

(defun c:docwinleft (/ app doc wrap hwnd w1 h1)

找了好几天相关的资料,今天终于找到了 非常感谢你提供了思路和灵感 也感谢高飞鸟大师
发表于 2023-1-20 12:46:38 | 显示全部楼层
 楼主| 发表于 2011-8-11 23:09:00 | 显示全部楼层
本帖最后由 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:03 | 显示全部楼层
本帖最后由 半听可乐 于 2012-8-30 20:06 编辑
xiaoyingzi 发表于 2011-8-11 23:09
用纯lisp好像不好解决,终于用lisp下调用api解决,
(vl-load-com)
(defun c:11 (/ app doc wrap hwnd w1  ...


这个好像实现不了哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-8-31 08:55:46 | 显示全部楼层
(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)
)
 楼主| 发表于 2012-8-31 08:59:20 | 显示全部楼层
其实用acad自带命令syswindows也可很方便的实现,不过窗口还有标题栏
 楼主| 发表于 2012-8-31 09:02:03 | 显示全部楼层
上面程序要注册dynwrapx.dll,具体可看高飞鸟大大的帖子,所以从实用性来说还是acad自带命令比较好
发表于 2012-8-31 09:06:33 | 显示全部楼层
docwinleft  docwinright 这两个命令执行后都报错:参数类型错误: VLA-OBJECT nil
已经加载(vl-load-com)
程序执行完后返回syswindows已经得到的结果
不知何故
 楼主| 发表于 2012-8-31 09:13:42 | 显示全部楼层
本帖最后由 xiaoyingzi 于 2012-8-31 09:56 编辑
xiaxiang 发表于 2012-8-31 09:06
docwinleft  docwinright 这两个命令执行后都报错:参数类型错误: VLA-OBJECT nil
已经加载(vl-load-com)  ...


上面程序要注册dynwrapx.dll,程序实现效果:

自带命令syswindows也可很方便的实现,不过窗口还有标题栏,效果如下



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

原来如此,忘记注册了!  发表于 2012-8-31 09:20
发表于 2013-6-22 20:04:15 | 显示全部楼层
这个东西用处有限,节省不了多少时间。
能不能像下面一样做一个,估计会比较方便:
比如,同时开了9个文件,我只想让其中的2个或N个文件均布于窗口。
我的这个思路看是否可以行:
输入命令后,立即出现一个对话框,这个对话框显示所有打开的文件的列表。然后勾选2个或3个文件均布与窗口。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 08:48 , Processed in 0.202086 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表