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