Keith™ 发表于 2012-6-14 11:11:24

Bricscad应用程序窗口句柄

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

Keith™ 发表于 2012-6-14 11:41:59

您将使用ThisDrawing.Application。HWND
干杯

Keith™ 发表于 2012-6-14 11:46:07

您尚未设置变量BricsApp,可以尝试以下操作:
Function GetAppHandle(ByRef Drawing As AcadDocument) As Long
GetAppHandle = Drawing.Application.HWND
End Function
或者Dim BricsApp As AcadApplication
Dim AppHandle As Long
Set BricsApp = ThisDrawing.Application
AppHandle = BricsApp.HWND

Keith™ 发表于 2012-6-14 11:52:52

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

Keith™ 发表于 2012-6-14 12:23:35

嗯……你试过这个吗
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Integer, _
                                                                ByVal wMsg As Integer, _
                                                                ByVal wParam As Integer, _
                                                                ByVal lParam As Integer) As Integer
Private Const WM_SETREDRAW As Integer = 11
SendMessage hWnd, WM_SETREDRAW, CInt(False), 0

Keith™ 发表于 2012-6-14 12:43:21

我得到一个;溢出“;运行SendMessage行时出错-但是,我对整个SendMessage功能完全不熟悉,因此,我可能无法正确设置它 本人'假设代码中的hwnd需要是bricsapp主窗口句柄
有什么解释吗;处决中发生了什么
Thx

Keith™ 发表于 2012-6-14 13:09:11

从技术上讲,当您发送消息时,您正在抽取句柄引用的控件的消息流。WM_SETREDRAW标志告诉窗口放弃对绘制的调用。“通过”;“假”;防止在调用invalidate rectangle函数时更新句柄引用的控件。因此,您必须始终调用该函数一次以禁用它,再调用一次以启用它。如果你不't您将无法访问应用程序窗口
您可以尝试将参数作为不同类型传递:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _
                                                                ByVal wMsg As Long, _
                                                                ByVal wParam As Long, _
                                                                ByVal lParam As Any) As Integer
Private Const WM_SETREDRAW As Integer = 11

Public Sub LockUpdates(ByVal hWnd As Long, ByVal Redraw As Boolean)
SendMessage hWnd, WM_SETREDRAW, Redraw, ByVal 0&
End Sub
作为旁白,你不'如果处理打开的图形,则不必将应用程序窗口传递给函数,只需传递图形的句柄即可
如果要打开然后打印,可能需要禁用整个窗口。

Keith™ 发表于 2012-6-14 13:22:02

谢谢基思-开始有意义了
要在完成(和出错时)恢复窗口更新,我会使用完全相同的函数调用,除了“0”之外;“真实”;而不是;False“假”:
SendMessage AppWinHandle,WM\u SETREDRAW,CInt(True),0也-最终参数的目的是什么;0;?

Keith™ 发表于 2012-6-14 13:31:34

您将传递True作为第三个参数。第四个参数也不用于WM_SETREDRAW,如果使用该函数传递值,只要(在我的第二个示例中)可以使用值True或False..或Clng(True)Clng(False)

Keith™ 发表于 2012-6-14 14:12:54

再次感谢基思-像一个迷人的工作,情节快速和干净
你能告诉我我在哪里吗;d查找有关使用SendMessage只是为了熟悉它的更多信息 例如,与hwnd可用的其他代码相对应的代码列表(即WM_SETREDRAW at 11)
I'今天我学到了很多-接下来我想知道如何显示进度条并抑制每次dwg打印时弹出的打印通知框
页: [1] 2
查看完整版本: Bricscad应用程序窗口句柄