如何使用wxWidgets模拟鼠标单击

如何使用wxWidgets模拟鼠标单击,wxwidgets,Wxwidgets,wxWidgets框架中是否有任何函数,例如click(),其功能是模拟鼠标左键单击?如果您只是在wxWidgets应用程序中模拟对另一个按钮的单击,我以前尝试过: 创建一个正确类型的伪wxEvent,告诉事件需要关注的对象 关于使用SetEventObject(),并告诉层次结构中的父wxWindow ProcessEvent(myNewEvent)。您可能希望使用wxGetToLevel父对象()获取最顶层的帧/对话框 如果您正在谈论在另一个非wxWidgets进程中模拟单击,那么您可以使用

wxWidgets框架中是否有任何函数,例如click(),其功能是模拟鼠标左键单击?

如果您只是在wxWidgets应用程序中模拟对另一个按钮的单击,我以前尝试过:

创建一个正确类型的伪wxEvent,告诉事件需要关注的对象 关于使用SetEventObject(),并告诉层次结构中的父wxWindow ProcessEvent(myNewEvent)。您可能希望使用wxGetToLevel父对象()获取最顶层的帧/对话框


如果您正在谈论在另一个非wxWidgets进程中模拟单击,那么您可以使用操作系统的可访问性API来实现这一点。wxAccessibility应该能够在Windows上帮助您实现这一点——对于其他操作系统,我上次听说(几年前就同意),您必须使用本机操作系统功能。

不,没有类似的功能。如果您确实需要这样做,例如,因为您想在另一个应用程序中执行某些操作,您需要自己编写特定于平台的代码(例如,在Windows下使用SendInput()

但是,如果您想在自己的应用程序中使用它来执行某些代码,那么有一个更好的解决方案:不要执行不受支持、脆弱和丑陋的操作

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);
}

您可以使用wxControl::Command()方法。根据文件:

模拟用户向项目发出命令的效果

您可以模拟单击按钮,如下所示:

$this->MyButton->Command(new wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED));
还有一个类可以用来模拟UI操作