从孙子呼叫按钮点击功能
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 的当前(和所有过去)版本,它可以工作,但更清洁,并且保证也可以与未来版本一起工作,解决方案将定义您自己的自定义事件并生成它。
我正在创建我的第一个 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 的当前(和所有过去)版本,它可以工作,但更清洁,并且保证也可以与未来版本一起工作,解决方案将定义您自己的自定义事件并生成它。