我编写了一个 VBA 7.0 程序,它可以在 Solidworks 中自动执行一些操作。我必须做的一件事是检查 Solidworks 文档中几个区域的拼写错误。我所做的是使用对 MessageBoxW 的 API 调用来显示系统模式消息框,以便他们有机会在继续或取消之前修复错字。
消息框显示正常,我可以进入正在运行的 Solidworks 应用程序并在其中工作,但是当我在程序中右键单击并尝试使用 RMB 上下文菜单时,开始发生一些奇怪的事情。
1) 鼠标按钮在程序中或消息框窗口上不再起作用。其他应用程序窗口继续正常响应,但在 Solidworks 应用程序窗口或消息框窗口中的任何位置单击鼠标(RMB 或 LMB)均无反应。窗口没有冻结 - 我可以按退出键退出上下文菜单,然后一切正常。当上下文菜单启动时,鼠标按钮单击似乎没有注册。2) 人民币上下文菜单“变成系统模式”。我不确定这是否正在发生,但我能想到的最好的方式来描述它。本质上,上下文菜单将始终显示在所有其他应用程序窗口的顶部。我仍然可以在其他窗口中工作,但除了上下文菜单之外没有任何负面影响。
不确定这是否与 Solidworks、MessageBoxW 函数或两者的组合有关。
编辑:这仅在显示消息框时发生,一旦关闭,行为是正常的。
我正在调用这样的 API 函数:
lngReply=WinMsgBox(Prompt:="Can you do this thing for me? blah blah",Title:="Action required",Buttons:=vbOkCancel + vbInformation + vbSystemModal
Option Explicit
Private Declare PtrSafe Function MessageBoxW Lib "User32" _
(Optional ByVal hWnd As Long, _
Optional ByVal Prompt As LongPtr, _
Optional ByVal Title As LongPtr, _
Optional ByVal Buttons As Long) _
As Long
Public Function WinMsgBox(Optional ByRef hWnd As Long, _
Optional ByRef Prompt As String, _
Optional ByRef Title As String, _
Optional ByRef Buttons As Long) _
As Long
WinMsgBox = MessageBoxW(hWnd, StrPtr(Prompt), StrPtr(Title), Buttons)
End Function