Я пытаюсь настроить пользовательский элемент управления в wxWidgets для представления канала в микшере звука.Итак, каждый канал имеет стандартный набор элементов управления внутри себя (некоторые ползунки, кнопки и т. Д.).
Итак, в моем классе есть классификатор, в который я добавляю различные дочерние элементы управления, которые мне нужны.Пока это работает.
Но у меня есть проблемы
, если я наследую от wxPanel, макет элемента управления работает так, как я ожидаю (он расширяется вsizer, чтобы соответствовать дочерним элементам управления), однако ни один из дочерних элементов не получает никаких событий (например, EVT_LEFT_DOWN и т. д.).Я попытался подключить событие для основного элемента управления, который запускает event.Skip (), но это не помогло.
Если я изменю свой класс на производный от wxControl вместо (или wxFrame, иливозможно, некоторые другие, которые я пробовал), дочерние элементы управления do получают события, но все это не раскрывается в том, в котором он находится, а просто рисуется в виде крошечного прямоугольника (около 10-20 квадратных пикселей), хотя дочерние элементы управления занимают гораздо больше места.
Есть идеи?
Обновление:
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 получает любые события, которые я подключаюему, но его дочерние элементы управления не делают.