乐筑天下

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

Bricscad应用程序窗口句柄

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 11:11:24 | 显示全部楼层 |阅读模式
有人知道如何在Bricscad中访问应用程序窗口句柄吗 本人'我是金砖四国VBA新手,可以#039;在他们的帮助文件中找不到任何信息
一直在玩这样的游戏:
将BricsApp作为一个应用程序进行Dim-AppHandle,只要长一点。但它所做的只是抛出一个运行时错误;对象变量或未设置块变量
Intelli sense将HWND显示为应用程序对象的属性,但有什么建议吗 长期目标是在长批量绘图程序期间关闭屏幕更新
谢谢
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 11:41:59 | 显示全部楼层
您将使用ThisDrawing.Application。HWND
干杯
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 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 | 显示全部楼层
明白了-意识到我没有't设置BricsApp-这消除了错误,谢谢
有人知道如何通过VBA防止Bricscad中的屏幕更新吗
基本方法:
将BricsApp设置为应用程序,将其设置为该绘图。应用程序,然后使用:私有声明函数LockWindowUpdate Lib;用户32“;(ByVal hwndLock As Long)只要使用锁定窗口更新BricsApp。HWND要关闭更新,有什么建议吗 目标是在长批量绘图程序期间关闭屏幕更新 到目前为止,上述内容没有影响-屏幕继续更新-运行WIn7 64谢谢
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 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主窗口句柄
有什么解释吗;处决中发生了什么
Thx
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 13:09:11 | 显示全部楼层
从技术上讲,当您发送消息时,您正在抽取句柄引用的控件的消息流。WM_SETREDRAW标志告诉窗口放弃对绘制的调用。“通过”;“假”;防止在调用invalidate rectangle函数时更新句柄引用的控件。因此,您必须始终调用该函数一次以禁用它,再调用一次以启用它。如果你不't您将无法访问应用程序窗口
您可以尝试将参数作为不同类型传递:
  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
作为旁白,你不'如果处理打开的图形,则不必将应用程序窗口传递给函数,只需传递图形的句柄即可
如果要打开然后打印,可能需要禁用整个窗口。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 13:22:02 | 显示全部楼层
谢谢基思-开始有意义了
要在完成(和出错时)恢复窗口更新,我会使用完全相同的函数调用,除了“0”之外;“真实”;而不是;False“假”:
SendMessage AppWinHandle,WM\u SETREDRAW,CInt(True),0也-最终参数的目的是什么;0;?
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2012-6-14 14:12:54 | 显示全部楼层
再次感谢基思-像一个迷人的工作,情节快速和干净
你能告诉我我在哪里吗;d查找有关使用SendMessage只是为了熟悉它的更多信息 例如,与hwnd可用的其他代码相对应的代码列表(即WM_SETREDRAW at 11)
I'今天我学到了很多-接下来我想知道如何显示进度条并抑制每次dwg打印时弹出的打印通知框
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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