明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4378|回复: 11

如何在VB内嵌入Autocad的界面?

  [复制链接]
发表于 2007-8-14 14:34:00 | 显示全部楼层 |阅读模式
各位朋友,目前AutoCAD二次开发的例子通常都是需要启动Autocad,在Autocad 内部画图或实现设计功能,使用VB或Delphi开发能否将Autocad界面嵌入到VB窗口内,如果可以的话,请谈一下方法,多谢了!!
发表于 2007-8-14 15:17:00 | 显示全部楼层

 ublic Sub AutoCAD_Appliaction(pic As VB.PictureBox, AcadApp As AcadApplication, AcadDoc As AcadDocument) '调用AUTOCAD在VB图形窗口中
    On Error Resume Next
    Dim i As Integer
    Set AcadApp = GetObject(, "AutoCAD.Application.16")
    If Err Then
        Err.Clear
        Set AcadApp = CreateObject("AutoCAD.Application.16")
        If Err Then
            pic.Visible = False
            MsgBox Err.Description
            pic.Visible = True
            Exit Sub
        End If
    Else
        If AcadApp.Documents.Count > 1 Then
            For i = AcadApp.Documents.Count To 1 Step -1
                Set AcadDoc = AcadApp.Documents.Item(i - 1)
                AcadDoc.Save
                AcadDoc.Close
            Next
        End If
    End If
    Set AcadDoc = Nothing
   
    Dim z As AcadMenuGroup
    Dim j As AcadToolbar
  
    For Each z In AcadApp.MenuGroups


        For Each j In z.Toolbars
        j.Delete
        Next j
    Next z
   
    lHwnd = GetParent(GetParent(AcadApp.ActiveDocument.hwnd))
    If lHwnd = 0 Then Exit Sub
    SetParent lHwnd, pic.hwnd
    SetWindowText lHwnd, "图形显示"
    AcadApp.Visible = True
    AcadApp.WindowState = acMax
  
  
End Sub

窗体建一图形控件

 楼主| 发表于 2007-8-14 17:20:00 | 显示全部楼层

多谢cangcang朋友给的解答,是否以后在图形中嵌入的CAD界面与使用VBA操作Autocad相同呢?还是有什么差别,或需要注意的地方,因为这方面的资料比较少,还希望能多给点建议,谢谢!

发表于 2007-8-14 17:22:00 | 显示全部楼层
把CAD嵌入VB与在CAD中使用程序区别并不大啊!唯一的好处就是不需要打开CAD,
 楼主| 发表于 2007-8-14 17:42:00 | 显示全部楼层

由于本人刚学VB不久,所以刚才在VB下试了没有成功,提示“用户定义类型未定义”。

还请多多指教!!

 楼主| 发表于 2007-8-14 19:42:00 | 显示全部楼层
还请各位高手指点呀!!
 楼主| 发表于 2007-8-14 22:25:00 | 显示全部楼层

可以实现了,在前面声明WINAPI函数,

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

在FormLoad中,调用AutoCAD_Appliaction即可,

Call AutoCAD_Appliaction(Picture1, acadapp, acadDoc)

显示出来的界面与Autocad界面及操作完全一样。

但是,Autocad可以在Picture内部拖动,并且能够关闭和最小化,如何限制CAD的这些功能呢?还请各位高手指教,先谢了!

发表于 2007-8-15 09:50:00 | 显示全部楼层
 楼主| 发表于 2007-8-15 11:19:00 | 显示全部楼层
我试着在CAD中画条直线,但每次CAD都会出现一个致命错误,另外还提示在画线时定义的点不对,不知什么原因,请大家帮我分析一下,看看是哪方面的问题,多谢!!

[CODE][/CODE]'在CAD内画条直线
Private Sub Command1_Click()
   Dim LineObj1 As AcadLine
   Dim point1(0 To 2) As AcadPoint, Point2(0 To 2) As AcadPoint
   point1(0) = 10#: point1(1) = 1000#:   point1(2) = 0#
   Point2(0) = 1000#:   Point2(1) = 0#:   Point2(2) = 0#
  ' Set LineObj1 = acadapp.ActiveDocument.ModelSpace.AddLine(point1, Point2)
End Sub
'调用AUTOCAD在VB图形窗口中
Public Sub AutoCAD_Appliaction(pic As VB.PictureBox, acadapp As AcadApplication, acadDoc As AcadDocument)
    On Error Resume Next
    Dim i As Integer
    Set acadapp = GetObject(, "AutoCAD.Application.16")
    If Err Then
        Err.Clear
        Set acadapp = CreateObject("AutoCAD.Application.16")
        If Err Then
            pic.Visible = False
            MsgBox Err.Description
            pic.Visible = True
            Exit Sub
        End If
    Else
        If acadapp.Documents.Count > 1 Then
            For i = acadapp.Documents.Count To 1 Step -1
                Set acadDoc = acadapp.Documents.Item(i - 1)
                acadDoc.Save
                acadDoc.Close
            Next
        End If
    End If
    Set acadDoc = Nothing
   
    Dim z As AcadMenuGroup
    Dim j As AcadToolbar
   
    For Each z In acadapp.MenuGroups
        For Each j In z.Toolbars
        j.Delete
        Next j
    Next z
        
    lHwnd = GetParent(GetParent(acadapp.ActiveDocument.hwnd))
    If lHwnd = 0 Then Exit Sub
    SetParent lHwnd, pic.hwnd
    SetWindowText lHwnd, "图形显示"
    acadapp.Visible = True
    acadapp.WindowState = acMax
   
End Sub
Private Sub Form_Load()
   Call AutoCAD_Appliaction(Picture1, acadapp, acadDoc)
   
End Sub
Private Sub Form_Unload(Cancel As Integer)
  If lHwnd = 0 Then Exit Sub
  SetParent lHwnd, 0
End Sub


 楼主| 发表于 2007-8-15 11:23:00 | 显示全部楼层

C:\Documents and Settings\Owner\My Documents\My Pictures\err.bmp

不知怎样发图片,刚才发的错误图片未显示出来,在发一遍。

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

本版积分规则

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

GMT+8, 2024-11-26 13:52 , Processed in 0.187009 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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