[讨论]如何令autocad软件窗口能够出现在VB窗体中?
大家都知道VB能调用autocad,有时候想在用VB做的某个窗体中能够显示autocad软件的窗口,而不必一定要转换到autocad窗口。该怎样编制程序代码(用VB或VBA)实现这一功能呢? 使用API函数SetParent吧,原理就是将ACAD的窗口设置为VB窗体的子窗口。 Private Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Longefan ,就这个吧?可我不知怎么用呀? 本帖最后由 作者 于 2003-10-11 21:06:30 编辑
Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private lHwnd As Long
Private Sub Form_Load()
On Error GoTo ErrTrap
Dim acadApp As Object
Set acadApp = CreateObject("AutoCAD.Application")
acadApp.Visible = True
lHwnd = GetParent(GetParent(acadApp.Activedocument.hwnd))
If lHwnd = 0 Then Exit Sub
SetParent lHwnd, Form1.hwnd
Exit Sub
ErrTrap:
On Error GoTo 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
If lHwnd = 0 Then Exit Sub
SetParent lHwnd, 0
End Sub
SetParent第一个参数是子窗口的句柄,现在设为ACAD的句柄了,第二个参数是父窗口的句柄,现在设为VB窗体的句柄。
恢复设置父窗口的句柄为0。也就是重新指定屏幕为其的父窗口。 不错!效果看起来确实专业! 查了我手中VB的书,都没有关于API的。我还是不能将autocad调出来。见笑了。。
efan能不能做个示例程序,只要能将autocad窗口在VB子窗体中显示即可。 上面的例子就可以在VB中直接运行啊。getparent用于获取ACAD的句柄。而setparent用于设置它的父窗口。 执行到getparent时提示:编译错误,子函数或函数未定义。怎么回事?
/
你将两个API函数的声明放到模块中了吧。如果是这样的话那么要将Private更改为Public,因为Public是公有的,才能被其它窗体或者模块、类模块引用。而Private是私有的,只能在它所在的窗体或者模块、类模块中引用。 这个错误我常犯!哎!
改过来了,可是还是不行,是不是还要其它代码?比如事先调用autocad的代码?