乐筑天下

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

Bricscad应用程序窗口句柄

[复制链接]
bty

1

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
10
发表于 2012-6-14 11:11:24 | 显示全部楼层 |阅读模式
任何人都知道如何访问Bricscad中的应用程序窗口句柄? 我是Brics VBA的新手,在他们的帮助文件中找不到任何信息。
一直在玩这样的东西:

Dim BricsApp As AcadApplication
Dim AppHandle As Long
AppHandle = BricsApp.HWND
但它所做的只是抛出一个运行时错误“对象变量或块变量未设置”
Intelli sense显示HWND作为应用程序对象的属性,但是.....
有什么建议吗? 长期目标是在长批量绘图程序期间关闭屏幕更新。
谢谢

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 11:41:59 | 显示全部楼层
你会用这幅画。Application.HWND
干杯
回复

使用道具 举报

bty

1

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
10
发表于 2012-6-14 11:46:07 | 显示全部楼层
您还没有设置变量BricsApp
您可以尝试这样的操作:
  1. Function GetAppHandle(ByRef Drawing As AcadDocument) As Long
  2. GetAppHandle = Drawing.Application.HWND
  3. End Function

或者
  1. Dim BricsApp As AcadApplication
  2. Dim AppHandle As Long
  3. Set BricsApp = ThisDrawing.Application
  4. AppHandle = BricsApp.HWND

回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 11:52:52 | 显示全部楼层
明白了-意识到我没有设置BricsApp-清除了错误,谢谢。
有人知道如何通过VBA阻止Bricscad中的屏幕更新吗?
基本方法:
Dim BricsApp As AcadApplication
设置BricsApp=ThisDrawing.Application
然后使用:
Private Declare Function LockWindowUpdate Lib"user32"(ByVal hwndLock As Long)As Long
with:
LockWindowUpdateBricsApp.HWND
关闭更新
有什么建议吗?目标是在长批处理绘图程序期间关闭屏幕更新。到目前为止,上面的没有影响-屏幕继续更新-运行WIn7 64
谢谢
回复

使用道具 举报

bty

1

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
10
发表于 2012-6-14 12:23:35 | 显示全部楼层
嗯。。。你试过这个吗?
  1. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Integer, _
  2.                                                                 ByVal wMsg As Integer, _
  3.                                                                 ByVal wParam As Integer, _
  4.                                                                 ByVal lParam As Integer) As Integer
  5. Private Const WM_SETREDRAW As Integer = 11
  6. SendMessage hWnd, WM_SETREDRAW, CInt(False), 0

回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 12:43:21 | 显示全部楼层
当我运行SendMessage时,我在它的行中得到了一个“溢出”错误-然而,我对整个SendMessage函数完全不熟悉,因此,我可能没有正确设置它。我假设你代码中的hwnd需要是bricsapp主窗口句柄<对执行过程中发生的事情有什么解释吗
您可以尝试将参数作为不同的类型传递:
  1. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _
  2.                                                                 ByVal wMsg As Long, _
  3.                                                                 ByVal wParam As Long, _
  4.                                                                 ByVal lParam As Any) As Integer
  5. Private Const WM_SETREDRAW As Integer = 11
  6. Public Sub LockUpdates(ByVal hWnd As Long, ByVal Redraw As Boolean)
  7.   SendMessage hWnd, WM_SETREDRAW, Redraw, ByVal 0&
  8. End Sub

顺便说一下,如果您正在处理打开的绘图,您不必将应用程序窗口传递给函数,您可以只传递绘图的句柄。
如果您正在打开然后打印,您可能想要禁用整个窗口。
回复

使用道具 举报

bty

1

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
10
发表于 2012-6-14 13:09:11 | 显示全部楼层
谢谢基思-开始有意义了。
要在完成时(出错时)恢复窗口更新,我是否应该使用完全相同的函数调用,除了“True”而不是“False”?:
SendMessage AppWinHandle,WM_SETREDRAW,CInt(True),0
还有——最后一个参数“0”的用途是什么?
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 13:22:02 | 显示全部楼层
您将传递True作为第三个参数。第四个参数不用于WM_SETREDRAW
此外,如果您使用该函数传递值,只要(如我的第二个示例中)您可以使用值True或False...或Clng(True)Clng(False)
回复

使用道具 举报

bty

1

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
10
发表于 2012-6-14 13:31:34 | 显示全部楼层
再次感谢Keith-像魅力一样工作,绘图快速干净!
你能告诉我在哪里可以找到更多关于使用SendMessage的信息来熟悉它吗?例如,对应于hwnd还有什么可用的代码列表(即WM_SETREDRAW在11)?
我今天学到了很多-接下来我想弄清楚如何显示进度条并抑制每次弹出dwg绘图的打印通知框。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 14:12:54 | 显示全部楼层
您可以在此处阅读有关 SendMessage 函数的信息
您可以在此处阅读有关绘制消息的信息
这里有一个库,其中包含您可以发送到窗口的所有消息 请记住
,有些消息可能无法在VBA环境中按预期工作。
如果要禁止显示打印通知对话框,可以相对容易地完成。(我怀疑你指的是AutoCAD的绘图窗口)。查看脚本。首先,使用设置了所有绘图参数构建脚本,然后由应用程序调用该脚本。
前段时间我使用了一种非常类似的方法来批量绘制整个图形文件夹。用户选择文件夹,编写脚本,然后调用。编写打印命令的脚本时,不显示窗口。
对于进度条,这更容易...
在窗体上,将进度条放到要显示的位置。将其可见属性设置为 false。当用户单击应用程序中的绘图按钮(假设您有绘图按钮)时,使进度条可见,将进度条的最大值设置为将要执行的绘图数,然后在循环浏览绘图时,将进度条值递增一。请确保不要将进度条设置为大于最大值的值,否则会发生错误。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-30 05:18 , Processed in 0.441822 second(s), 72 queries .

© 2020-2025 乐筑天下

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