2008-09-03 6 views
2

У меня есть форма vb6 с элементом управления ocx. У элемента управления ocx есть кнопка, на которую я хочу нажать код. Как мне это сделать?Как мне щелкнуть по кнопке в форме vb6?

у меня есть:

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

, но это не похоже на работу.

ответ

3

Я считаю, что следующий будет работать:

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

CommandButton s на самом деле имеют две функции. Одна из них - обычная кнопка, а другая - кнопка переключения, которая действует аналогично CheckBox. Свойство по умолчанию для CommandButton фактически является свойством Value, которое указывает, включена ли кнопка. Установив свойство, генерируется событие Click. Это делается, даже если кнопка не указана как ToggleButton и поэтому не изменяет ее состояние.

1

Если у вас есть доступ к OCX-коду, вы можете открыть связанный обработчик событий и вызвать его напрямую.
Не знаю, если эквивалент метода .Net Баттона Click() существовали еще в VB6 дней

0

У вас есть доступ к OCX-коду? На самом деле вы не должны нажимать кнопку непосредственно. Вы должны реорганизовать код, чтобы код щелчка кнопки OCX вызывал функцию, например.

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

После этого от вашего приложения VB6, непосредственно вызовите метод FooBar. Если вы не можете напрямую вызывать функции из VB6, вы можете обернуть метод FooBar() с помощью функции обработки сообщений Windows, например.

#define WM_FOOBAR WM_APP + 1 

Затем используйте SendMessage в VB6, как SendMessage(WM_FOOBAR, ...)

0

это:

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

работает. Полностью неинтуитивный. Я бы ожидал, что он выкинет ошибку, так как bool не является допустимым CommandButton, но это из-за свойства свойства по умолчанию.

WM_LBUTTONDOWN будет щелчком мыши, я хочу нажать кнопку (кнопка, как в кнопке hwnd, а не в кнопке мыши).

У меня нет доступа к источнику ocx (это сторонний элемент управления). Если бы я это сделал, я бы выставил функцию, которую я хотел назвать (оригинальный автор ocx должен был ее разоблачить).

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