明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 44005|回复: 81

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

  [复制链接]
发表于 2003-10-8 11:11:00 | 显示全部楼层 |阅读模式
大家都知道VB能调用AutoCAD,有时候想在用VB做的某个窗体中能够显示autocad软件的窗口,而不必一定要转换到autocad窗口。该怎样编制程序代码(用VB或VBA)实现这一功能呢?
发表于 2003-10-8 13:29:00 | 显示全部楼层
使用API函数SetParent吧,原理就是将ACAD的窗口设置为VB窗体的子窗口。
 楼主| 发表于 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 ,就这个吧?可我不知怎么用呀?
发表于 2003-10-8 19:10:00 | 显示全部楼层
本帖最后由 作者 于 2003-10-11 21:06:30 编辑


  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。也就是重新指定屏幕为其的父窗口。

评分

参与人数 1威望 +1 金钱 +10 贡献 +5 激情 +5 收起 理由
mccad + 1 + 10 + 5 + 5 【好评】好程序

查看全部评分

发表于 2003-10-8 21:45:00 | 显示全部楼层
不错!效果看起来确实专业!
 楼主| 发表于 2003-10-9 12:57:00 | 显示全部楼层
查了我手中VB的书,都没有关于API的。我还是不能将autocad调出来。见笑了。。
efan能不能做个示例程序,只要能将autocad窗口在VB子窗体中显示即可。
发表于 2003-10-9 13:01:00 | 显示全部楼层
上面的例子就可以在VB中直接运行啊。getparent用于获取ACAD的句柄。而setparent用于设置它的父窗口。
 楼主| 发表于 2003-10-9 13:17:00 | 显示全部楼层
执行到getparent时提示:编译错误,子函数或函数未定义。怎么回事?
/

本帖子中包含更多资源

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

x
发表于 2003-10-9 13:27:00 | 显示全部楼层
你将两个API函数的声明放到模块中了吧。如果是这样的话那么要将Private更改为Public,因为Public是公有的,才能被其它窗体或者模块、类模块引用。而Private是私有的,只能在它所在的窗体或者模块、类模块中引用。
 楼主| 发表于 2003-10-9 13:41:00 | 显示全部楼层
这个错误我常犯!哎!
改过来了,可是还是不行,是不是还要其它代码?比如事先调用autocad的代码?

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-25 06:44 , Processed in 0.178888 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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