从孙子呼叫按钮点击功能

Call button click function from grandchild

我正在创建我的第一个 C++ wxWidgets 应用程序。我正在尝试创建某种拆分按钮,其中选项显示在网格中。我有一个自定义按钮 class,当右键单击它时,会打开一个包含其他按钮的自定义 wxPopupTransientWindow。 当我单击弹出窗口中的按钮时,我想模拟左键单击主按钮。我试图通过事件来实现这一点,但我有点困惑。

void expandButton::mouseReleased(wxMouseEvent& evt)
{
    if (pressed) {
        pressed = false;
        paintNow();

        wxWindow* mBtn = this->GetGrandParent();
        mBtn->SetLabel(this->GetLabel());
        mBtn->Refresh();

        wxCommandEvent event(wxEVT_BUTTON);
        event.SetId(GetId());
        event.SetEventObject(mBtn);
        mBtn-> //make it process the event somehow?

        wxPopupTransientWindow* popup = wxDynamicCast(this->GetParent(), wxPopupTransientWindow);
        popup->Dismiss();
    }
}

最好的方法是什么?

你应该做 mBtn->ProcessWindowEvent(),这是评论中已经提到的 mBtn->GetEventHandler()->ProcessEvent() 的较短同义词。

请注意,一般来说,您不应该从自己的代码创建 wxEVT_BUTTON 事件。在这种特殊情况下,对于 wxWidgets 的当前(和所有过去)版本,它可以工作,但更清洁,并且保证也可以与未来版本一起工作,解决方案将定义您自己的自定义事件并生成它。