如何使用wxWidgets模拟鼠标单击

时间:2009-12-19 13:05:28

标签: wxwidgets

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

3 个答案:

答案 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()方法。根据文件:

  

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

Documentation page

List of events to use with wxCommandEvent constructor

您可以模拟按钮上的点击,如下所示:

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

还可以使用wxUIActionSimulator类来模拟UI操作。