我正在尝试在wxWidgets中设置用户控件以表示音频混音器中的频道。因此,每个通道本身都有一组标准控件(一些滑块,按钮等)。
所以在我的课程中我有一个sizer,我在其中添加了我需要的各种子控件。到目前为止有效。
但我遇到的问题是
如果我从wxPanel派生,控件的布局就像我期望的那样工作(它在sizer中扩展以适应子控件),但是没有一个孩子得到任何事件(比如EVT_LEFT_DOWN等)。我尝试连接一个运行event.Skip()的主控件的事件,但这没有帮助。
如果我将我的类更改为从wxControl派生(或者wxFrame,或者可能是我尝试的其他一些人),则子控件做获取事件,但整件事情并非如此在它所在的sizer中扩展,它只是被绘制成一个小盒子(大约10-20平方px),即使子控件占用更多的空间。
有什么想法吗?
更新
mangoMixerStrip.cpp
mangoMixerStrip::mangoMixerStrip(wxFrame* parent, HostChannel* channel) : wxPanel(parent)
{
myChannel = channel;
SetBackgroundColour(wxColour(172,81,90));
wxBoxSizer* s = new wxBoxSizer(wxVERTICAL);
// some custom controls i made which all work fine when added like any other control, derived from wxPanel also
faderPan = new mangoFader(parent, 200, false, 55);
faderGain = new mangoFader(parent, 200, true, 126);
buttonSolo = new mangoButton(parent, false, ButtonGraphic::Solo);
s->Add(faderPan);
s->Add(buttonSolo);
s->Add(faderGain);
this->SetSizer(s);
this->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(mangoMixerStrip::mouseDown)); // this function simply contains event.Skip()
}
在我的主要wxFrame中
mangoFrameMain::mangoFrameMain(wxWindow* parent) : FrameMain( parent )
{
HostChannel* h = new HostChannel();
h->setName("what up"); // these 2 lines unrelated to the UI
mangoMixerStrip *test = new mangoMixerStrip(this, h);
this->GetSizer()->Add(test, 1, wxFIXED_MINSIZE, 0);
}
并澄清:mangoMixerStrip实例本身会获取我连接到它的任何事件,但它的子控件不会。
答案 0 :(得分:0)
您的控件应该是从wxPanel派生的类的子级,而不是面板父级的子级。
faderPan = new mangoFader(parent, 200, false, 55);
应该是
faderPan = new mangoFader(this, 200, false, 55);
答案 1 :(得分:0)
如果您想使用wxFrame,也可以这样做。但是,您必须确保在创建框架后,将大小调整器添加到框架,然后添加面板,然后添加另一个大小调整器。然后你可以在sizer中放置你想要的任何东西。出于某种原因,如果你不放置sizer,然后是panel,然后是sizer,那么wxwidgets的大小不会正确。