wowan1314 发表于 2012-8-20 18:34:33

VLISP如何调用API隐藏CAD标题栏(已解决)。

本帖最后由 wowan1314 于 2012-8-21 12:15 编辑

通过加载高飞鸟分享的那个VLX...可调用API函数。

不过对于API完全不了解,搞了一天没整明白,,

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=81335 这个是VB编的。

;;;;CAD标题栏、菜单栏 的隐藏与显示(不行)
|;
      (vlax-invoke wrap 'Register "USER32" "SetWindowLong" "i=lll" "r=l");注册SetWindowLong函数
      (vlax-invoke wrap 'Register "USER32" "GetWindowLong" "i=ll" "r=l");注册GetWindowLong函数
      (setq win_style (vlax-invoke wrap 'GetWindowLong hwnd -16))
      ;;(vlax-invoke wrap 'SetWindowLong hwnd -16 0000);隐藏标题栏。。SetWindowPos 更新?


想做个隐藏标题栏与菜单栏的程序。求指导。

highflybir 发表于 2012-8-20 18:34:34

本帖最后由 highflybir 于 2012-8-21 02:17 编辑


(vl-load-com)
;;; ====================================================================
;;; 隐藏CAD菜单栏和标题栏                                             
;;; ====================================================================
(defun C:Ccc (/ DWX app hwnd menu)
;; Create a DynamicWrapperX instance and register win32 API functions.
(setq DWX (vlax-create-object "DynamicWrapperX"))
(and (null DWX) (exit))
(vlax-invoke DWX 'Register "USER32" "SetWindowLong" "i=lll" "r=l") ;注册SetWindowLong函数
(vlax-invoke DWX 'Register "USER32" "GetWindowLong" "i=ll" "r=l") ;注册GetWindowLong函数
(vlax-invoke DWX 'Register "USER32" "SetMenu" "i=ll" "r=l");设置菜单
(vlax-invoke DWX 'Register "USER32" "GetMenu" "i=l" "r=l");取得当前菜单句柄
;;Hide the title and menubar
(setq app (vlax-get-acad-object))   ;当前CAD程序
(setq hwnd (vla-get-hwnd app))   ;CAD窗口句柄
(ShowTitle DWX hwnd nil)      ;隐藏标题栏
(setq menu (vlax-invoke DWX 'GetMenu hwnd))                           ;获得程序的菜单句柄
(and (/= menu 0) (setq hMenu menu))   ;此处应把hMenu设置为全局变量
(vlax-invoke DWX 'SetMenu hwnd 0)   ;(vlax-invoke DWX 'SetMenu hwnd hMenu) 恢复菜单栏
;; Release object
(vlax-release-object app)
(vlax-release-object DWX)
(princ)
)
(defun ShowTitle (DWX hwnd Show / oldStyle)    ;如果show 为t 那么显示,否则不显示
(setq oldStyle(vlax-invoke Dwx 'GetWindowLong hwnd -16))   ;GWL_STYLE -16
(if Show
    (if (zerop (logand oldstyle 12582912))    ;WS_CAPTION 12582912 C00000
      (vlax-invoke DWX 'SetWindowLong hwnd -16 (+ oldstyle 12582912))
    )
    (if (/= 0(logand oldstyle 12582912))    ;WS_CAPTION 12582912 C00000
      (vlax-invoke DWX 'SetWindowLong hwnd -16 (- oldstyle 12582912))
    )
)
)

wowan1314 发表于 2012-8-22 12:09:03

本帖最后由 wowan1314 于 2013-4-6 20:36 编辑

highflybir 发表于 2012-8-20 18:34 static/image/common/back.gif

发现问题了。。
1、打开多个图纸的情况下。在图纸间切换一下,菜单栏就又出现了。
2、从CAD界面切换到其他文件夹,再切换回来时候,系统的任务栏也被遮挡了。。
请高飞鸟有时间再帮忙调整下。。

自贡黄明儒 发表于 2013-4-3 16:33:57

highflybir 发表于 2012-8-20 18:34 static/image/common/back.gif


向highflybir学习

juniko 发表于 2013-4-23 23:46:03

发现这个调用api的方法好多了。。。就是要注册个控件麻烦了点

wangph 发表于 2013-4-24 00:06:34

这种方法对高版本的CAD是改不了的

我爱lisp 发表于 2014-12-9 14:38:03

一直想找这么个通用函数,对cAD界面进行设置,让二次开发显得更专业,顶起来
页: [1]
查看完整版本: VLISP如何调用API隐藏CAD标题栏(已解决)。