wxWidgets框架中是否有任何函数,比如click(),其功能是模拟鼠标左键?
答案 0 :(得分:1)
如果您只是在谈论模仿wxWidgets应用中其他按钮的点击,我之前尝试过这样做:
创建一个正确类型的假wxEvent,告诉事件需要关注的对象 关于使用SetEventObject(),并告诉层次结构中的父wxWindow processEvent方法(myNewEvent)。您可能希望使用wxGetTopLevelParent()来获取最顶层的框架/对话框
如果您正在讨论在另一个非wxWidgets流程中模拟点击,则可以使用操作系统的辅助功能API来执行此操作。 wxAccessibility应该可以在Windows上帮助解决这个问题 - 对于其他操作系统,我听说(几年前授权),你将不得不使用本机操作系统功能。
答案 1 :(得分:1)
不,没有这样的功能。如果你真的需要这样做,例如因为您想在另一个应用程序中执行某些操作,您需要自己编写特定于平台的代码(例如,在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);
}
答案 2 :(得分:1)
您可以使用wxControl :: Command()方法。根据文件:
模拟用户向项目发出命令的效果。
List of events to use with wxCommandEvent constructor
您可以模拟按钮上的点击,如下所示:
$this->MyButton->Command(new wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED));
还可以使用wxUIActionSimulator类来模拟UI操作。