我有一个带有ocx控件的vb6表单。 ocx控件上有一个按钮,我想从代码中按下。我该怎么做?
我有:
Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
SendMessage ocx.hwnd, WM_COMMAND, GetWindowLong(b.hwnd, GWL_ID), b.hwnd
但它似乎不起作用。
答案 0 :(得分:2)
我相信以下内容可行:
Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
b = True
CommandButton
实际上有两个功能。一个是常用的点击按钮,另一个是切换按钮,其作用类似于CheckBox
。 CommandButton
的默认属性实际上是Value
属性,用于指示是否切换按钮。通过设置属性,将生成Click
事件。即使按钮未设置为ToggleButton
,也不会更改其状态,即可完成此操作。
答案 1 :(得分:1)
如果您有权访问OCX代码,则可以公开相关的事件处理程序并直接调用它 不知道是否有相当于.Net Button的Click()方法存在于VB6天
答案 2 :(得分:0)
您是否可以访问OCX代码?您不应该直接调用按钮的单击。您应该重构代码,以便OCX按钮单击代码调用一个函数,例如
CMyWindow::OnLButtonDown()
{
this->FooBar();
}
然后从您的VB6应用程序,直接调用FooBar方法。如果你不能直接从VB6调用函数,你可以使用windows消息proc函数包装FooBar()方法,例如。
#define WM_FOOBAR WM_APP + 1
然后在VB6中使用SendMessage
,例如SendMessage(WM_FOOBAR, ...)
答案 3 :(得分:0)
此:
Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
b = True
确实有效。完全不直观。我希望它抛出一个错误,因为bool不是一个有效的CommandButton,但这是因为默认的属性。
WM_LBUTTONDOWN
将是一个鼠标点击,我想要的是一个按钮点击(按钮在hwnd按钮,而不是鼠标按钮)。
我无法访问ocx的来源(它是第三方控件)。如果我这样做,我会暴露我想调用的函数(ocx的原始编写者应该暴露它)。
答案 4 :(得分:0)
对于按键,您还可以使用sendmessage发送keydown和keyup:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Const WM_KEYDOWN As Integer = &H100
Const WM_KEYUP As Integer = &H101
Const VK_SPACE = &H20
Private Sub cmdCommand1_Click()
Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
SendMessage b.hWnd, WM_KEYDOWN, VK_SPACE, 0&
SendMessage b.hWnd, WM_KEYUP, VK_SPACE, 0&
End Sub