我試圖在wxWidgets中製作一個用戶控件來表示一個音頻混音器中的頻道。所以,每個頻道都有一套標準的控制器(一些滑塊,按鈕等)。wxWidgets:正確地製作一個包含其他控件的用戶控件本身
因此,在我的課堂中,我有一個sizer,在其中添加了我需要的各種子控件。到目前爲止,這工作。
但我的問題是
,如果我從wxPanel,控制工程的佈局但是,沒有得到,因爲我希望它(它得到篩分器擴展,以適應子控件)孩子們得到任何事件(如EVT_LEFT_DOWN等)。我試圖連接一個事件運行event.Skip()但沒有幫助的主控制。
如果我改變我的類從wxControl代替(或wxFrame,也可能是其他一些人我試過的)推導,子控件做獲取事件,但整個事情不會在分級機得到擴展它位於,它只是被繪製成一個小盒子(大約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實例本身得到我連接任何事件對它,但它的孩子控制沒有。
從wxPanel派生是正確的方法。奇怪的是,你的控件沒有得到事件。請發佈您的代碼,以便我們可以看到發生了什麼。 – ravenspoint
用代碼更新。 – tacospice