Как эмулировать щелчок мышью с помощью wxWidgets

Есть ли в фреймворке wxWidgets какая-либо функция, скажем, click(), функция которой заключается в эмуляции щелчка левой кнопкой мыши?


person fushar    schedule 19.12.2009    source источник


Ответы (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);
}
person VZ.    schedule 27.12.2009

Если вы просто говорите об эмуляции нажатия на другую кнопку в вашем приложении wxWidgets, я пробовал это раньше:

Создайте поддельное wxEvent нужного типа, сообщите событию, о каком объекте следует заботиться, используя SetEventObject(), и сообщите родительскому wxWindow в иерархии о ProcessEvent(myNewEvent). Вы можете использовать wxGetTopLevelParent(), чтобы получить самый верхний кадр/диалог.

Если вы говорите об эмуляции щелчка в другом процессе, отличном от wxWidgets, возможно, вы могли бы использовать для этого специальные API операционной системы. wxAccessibility должен быть в состоянии помочь с этим в Windows - для других ОС, в последний раз я слышал (правда, несколько лет назад), вам придется использовать собственные функции ОС.

person RyanWilcox    schedule 27.12.2009

Вы можете использовать метод wxControl::Command(). Согласно документации:

Имитирует действие пользователя, выдающего команду элементу.

Страница документации

Список событий для использования с конструктором wxCommandEvent

Вы можете имитировать нажатие на кнопку следующим образом:

$this->MyButton->Command(new wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED));

Существует также класс wxUIActionSimulator, который можно использовать для моделирования действий пользовательского интерфейса.

person Pouria P    schedule 29.06.2015