乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 139|回复: 9

[讨论]如何令autocad软件窗口能够出现在VB窗体中?

[复制链接]

32

主题

85

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
213
发表于 2003-10-8 11:11:00 | 显示全部楼层 |阅读模式
大家都知道VB能调用,有时候想在用VB做的某个窗体中能够显示autocad软件的窗口,而不必一定要转换到autocad窗口。该怎样编制程序代码(用VB或VBA)实现这一功能呢?
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2003-10-8 13:29:00 | 显示全部楼层
使用API函数SetParent吧,原理就是将ACAD的窗口设置为VB窗体的子窗口。
回复

使用道具 举报

32

主题

85

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
213
发表于 2003-10-8 16:14:00 | 显示全部楼层
Private Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
efan ,就这个吧?可我不知怎么用呀?
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2003-10-8 19:10:00 | 显示全部楼层

  1. Option Explicit
  2. Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  3. Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
  4. Private lHwnd As Long
  5. Private Sub Form_Load()
  6.    
  7.     On Error GoTo ErrTrap
  8.     Dim acadApp As Object
  9.     Set acadApp = CreateObject("AutoCAD.Application")
  10.     acadApp.Visible = True
  11.     lHwnd = GetParent(GetParent(acadApp.Activedocument.hwnd))
  12.     If lHwnd = 0 Then Exit Sub
  13.     SetParent lHwnd, Form1.hwnd
  14.     Exit Sub
  15.    
  16. ErrTrap:
  17.     On Error GoTo 0
  18. End Sub
  19. Private Sub Form_Unload(Cancel As Integer)
  20.     If lHwnd = 0 Then Exit Sub
  21.     SetParent lHwnd, 0
  22. End Sub

SetParent第一个参数是子窗口的句柄,现在设为ACAD的句柄了,第二个参数是父窗口的句柄,现在设为VB窗体的句柄。
恢复设置父窗口的句柄为0。也就是重新指定屏幕为其的父窗口。
回复

使用道具 举报

41

主题

657

帖子

9

银币

中流砥柱

Rank: 25

铜币
821
发表于 2003-10-8 21:45:00 | 显示全部楼层
不错!效果看起来确实专业!
回复

使用道具 举报

32

主题

85

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
213
发表于 2003-10-9 12:57:00 | 显示全部楼层
查了我手中VB的书,都没有关于API的。我还是不能将autocad调出来。见笑了。。
efan能不能做个示例程序,只要能将autocad窗口在VB子窗体中显示即可。
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2003-10-9 13:01:00 | 显示全部楼层
上面的例子就可以在VB中直接运行啊。getparent用于获取ACAD的句柄。而setparent用于设置它的父窗口。
回复

使用道具 举报

32

主题

85

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
213
发表于 2003-10-9 13:17:00 | 显示全部楼层
执行到getparent时提示:编译错误,子函数或函数未定义。怎么回事?
/

r3o5iz3wlaq.jpg

r3o5iz3wlaq.jpg

回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2003-10-9 13:27:00 | 显示全部楼层
你将两个API函数的声明放到模块中了吧。如果是这样的话那么要将Private更改为Public,因为Public是公有的,才能被其它窗体或者模块、类模块引用。而Private是私有的,只能在它所在的窗体或者模块、类模块中引用。
回复

使用道具 举报

32

主题

85

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
213
发表于 2003-10-9 13:41:00 | 显示全部楼层
这个错误我常犯!哎!
改过来了,可是还是不行,是不是还要其它代码?比如事先调用autocad的代码?

zaaiz2c3j25.jpg

zaaiz2c3j25.jpg
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 08:01 , Processed in 1.298092 second(s), 76 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表