明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索

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

  [复制链接]
发表于 2003-10-12 14:47 | 显示全部楼层
efan2000发表于2003-10-12 14:27:00不是不能,由于将ACAD的窗口尺寸设置为VB窗体客户区的大小,因而两个窗口的右下角位置几乎是一样的,所以拖动的时候可能真正的是拖动ACAD的窗口。
这种情况可以将ACAD的窗口尺寸设置的小一些



把acad的窗口尺寸调小后,还是拖不动。因为一拖动,程序的焦点就从vb窗口转到了acad窗口。
发表于 2003-10-12 16:32 | 显示全部楼层
本帖最后由 作者 于 2003-10-13 12:28:22 编辑

是在程序中定义,而不是手工调整。

将程序中的:
SetWindowPos lHwnd, 0, Form1.ScaleLeft, Form1.ScaleTop, Form1.ScaleWidth, Form1.ScaleHeight, 0
更改为:
SetWindowPos lHwnd, 0, Form1.ScaleLeft, Form1.ScaleTop, Form1.ScaleWidth-5, Form1.ScaleHeight-5, 0
就可以了,当然如果需要ACAD窗口与VB窗体的间隔大点,可将5替换成10、20等。
发表于 2003-10-13 11:25 | 显示全部楼层
为什么在Win98下不能自动启动AutoCAD2002呢?必须先启动AtuoCAD2002后,再运行VB程序AutoCAD窗口才能打开呀!!!
发表于 2003-10-13 11:56 | 显示全部楼层
很好,但就是不能把cad的标题隐藏起来(南方的cass就做的很好)

将程序中的r.Right - r.Left和r.Bottom - r.Top同时减去一个数值,还是不行。

有什么好办法吗?
发表于 2003-10-13 12:38 | 显示全部楼层
前面有错,是修改SetWindowPos lHwnd, 0, Form1.ScaleLeft, Form1.ScaleTop, Form1.ScaleWidth, Form1.ScaleHeight, 0这一句。
隐藏窗口的标题需要另外的API函数。
下面的例子中acadhwnd代表ACAD应用程序的句柄,也就是前面使用两次GetParent获得的值。

  1.     Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  2.     Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  3.     Const GWL_STYLE = (-16)
  4.     Const WS_CAPTION = &HC00000
  5.      
  6.     Private Sub Test()
  7.      Dim L As Long
  8.      L = GetWindowLong(acadhwnd, GWL_STYLE)
  9.      L = L And Not (WS_CAPTION)
  10.      L = SetWindowLong(acadhwnd, GWL_STYLE, L)
  11.     End Sub
发表于 2003-10-13 13:10 | 显示全部楼层
很好,收获不少阿!!谢谢。

但现在效果还不是很理想(因为用户还是可以改变cad窗口的大小,而VB窗口不能相应改变),看看南方的界面吧,看如何实现呢?

本帖子中包含更多资源

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

x
发表于 2003-10-13 13:22 | 显示全部楼层
这个界面你觉的跟ACAD本身有什么不同?它是嵌套在其它窗体中的?
有区别的应该是窗口的标题和图标吧。使用SetWindowText和SetIcon就可以实现了,根据不必须要那么复杂。应该说它的运行过程是:首先启动自己的程序,在其中加载ACAD,更改它的标题和图标。接着是加载自己的配置文件,以及菜单和工具栏,接下来是加载自己的程序(Lisp、ARX、VBA之类的),最后完成加载,退出本身的启动,把后续的操作交给ACAD。
发表于 2003-10-13 13:40 | 显示全部楼层
哦,原来如此!
SetWindowText的用法查msdn可以查到,但SetIcon的用法没有!
发表于 2003-10-13 13:51 | 显示全部楼层
又记错了,那是我以前写的一个函数Public Function SetIcon(byval Hwnd as long,byval IconFileName as string),应该使用LoadImage和SendMessage来设置。

更改窗口的图标见下面的代码:


  1. Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
  2. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  3. Private Const WM_SETICON = &H80
  4. Private Const IMAGE_ICON = 1
  5. Private Const LR_LOADFROMFILE = &H10

  6. Public Sub SetIcon()
  7.     Dim hIcon As Long
  8.    
  9.     'FileName 图标文件, Hwnd  ACAD应用程序的句柄
  10.     hIcon = LoadImage(0&, FileName, IMAGE_ICON, 16, 16, LR_LOADFROMFILE)
  11.     If hIcon <> 0 Then
  12.         Call SendMessage(Hwnd, WM_SETICON, 0, ByVal hIcon)
  13.     End If
  14. End Sub
发表于 2003-10-13 16:30 | 显示全部楼层
efan2000版主,还有问题要请教:

如何获得ACAD应用程序的句柄?

acadapp没有 hWnd 属性 !
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 11:44 , Processed in 0.417876 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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