如何单击vb6表单上的按钮?

时间:2008-09-03 02:39:52

标签: vb6

我有一个带有ocx控件的vb6表单。 ocx控件上有一个按钮,我想从代码中按下。我该怎么做?

我有:

Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
SendMessage ocx.hwnd, WM_COMMAND, GetWindowLong(b.hwnd, GWL_ID), b.hwnd

但它似乎不起作用。

5 个答案:

答案 0 :(得分:2)

我相信以下内容可行:

Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
b = True

CommandButton实际上有两个功能。一个是常用的点击按钮,另一个是切换按钮,其作用类似于CheckBoxCommandButton的默认属性实际上是Value属性,用于指示是否切换按钮。通过设置属性,将生成Click事件。即使按钮未设置为ToggleButton,也不会更改其状态,即可完成此操作。

答案 1 :(得分:1)

如果您有权访问OCX代码,则可以公开相关的事件处理程序并直接调用它 不知道是否有相当于.Net Button的Click()方法存在于VB6天

答案 2 :(得分:0)

此:

Dim b As CommandButton
Set b = ocx.GetButton("btnPrint")
b = True

确实有效。完全不直观。我希望它抛出一个错误,因为bool不是一个有效的CommandButton,但这是因为默认的属性。

WM_LBUTTONDOWN将是一个鼠标点击,我想要的是一个按钮点击(按钮在hwnd按钮,而不是鼠标按钮)。

我无法访问ocx的来源(它是第三方控件)。如果我这样做,我会暴露我想调用的函数(ocx的原始编写者应该暴露它)。

答案 3 :(得分:0)

您是否可以访问OCX代码?您不应该直接调用按钮的单击。您应该重构代码,以便OCX按钮单击代码调用一个函数,例如

CMyWindow::OnLButtonDown()
{
  this->FooBar();
}

然后从您的VB6应用程序,直接调用FooBar方法。如果你不能直接从VB6调用函数,你可以使用windows消息proc函数包装FooBar()方法,例如。

#define WM_FOOBAR WM_APP + 1

然后在VB6中使用SendMessage,例如SendMessage(WM_FOOBAR, ...)

答案 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