Есть ли в фреймворке wxWidgets какая-либо функция, скажем, click(), функция которой заключается в эмуляции щелчка левой кнопкой мыши?
Как эмулировать щелчок мышью с помощью wxWidgets
Ответы (3)
Нет, такой функции нет. Если вам действительно нужно это сделать, например. поскольку вы хотите выполнить какое-либо действие в другом приложении, вам нужно самостоятельно написать код для конкретной платформы (например, использовать SendInput() в Windows).
Если вы хотите использовать это для выполнения некоторого кода в своем собственном приложении, есть гораздо лучшее решение: вместо того, чтобы делать неподдерживаемый, хрупкий и уродливый
void MyClass::OnLeftUp(wxMouseEvent& event)
{
... do something with click at event.GetPosition() ...
}
void MyOtherFunction()
{
wxMouseEvent event(...);
... initialization not shown because there is no right way to do it anyhow ...
myObject->ProcessEvent(event);
}
просто реорганизуйте свой код, чтобы сделать это так:
void MyClass::OnLeftUp(wxMouseEvent& event)
{
HandleClick(event.GetPosition());
}
void MyClass::HandleClick(const wxPoint& pos)
{
... do something with click at pos ...
}
void MyOtherFunction()
{
myObject->HandleClick(position);
}
Если вы просто говорите об эмуляции нажатия на другую кнопку в вашем приложении wxWidgets, я пробовал это раньше:
Создайте поддельное wxEvent нужного типа, сообщите событию, о каком объекте следует заботиться, используя SetEventObject(), и сообщите родительскому wxWindow в иерархии о ProcessEvent(myNewEvent). Вы можете использовать wxGetTopLevelParent(), чтобы получить самый верхний кадр/диалог.
Если вы говорите об эмуляции щелчка в другом процессе, отличном от wxWidgets, возможно, вы могли бы использовать для этого специальные API операционной системы. wxAccessibility должен быть в состоянии помочь с этим в Windows - для других ОС, в последний раз я слышал (правда, несколько лет назад), вам придется использовать собственные функции ОС.
Вы можете использовать метод wxControl::Command(). Согласно документации:
Имитирует действие пользователя, выдающего команду элементу.
Список событий для использования с конструктором wxCommandEvent
Вы можете имитировать нажатие на кнопку следующим образом:
$this->MyButton->Command(new wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED));
Существует также класс wxUIActionSimulator, который можно использовать для моделирования действий пользовательского интерфейса.