wxWidgetsでユーザーコントロールを作成して、オーディオミキサーでチャンネルを表現しようとしています。したがって、各チャンネルには、内部に標準的なコントロールセットがあります(いくつかのスライダ、ボタンなど)。wxWidgets:自分自身の内部に他のコントロールを含むユーザーコントロールを正しく作成する
私のクラスの中には、私が必要とする様々な子コントロールを追加するサイザーがあります。これまでのところ動作します。
しかし、私は(それが子コントロールに合うようにサイザーに展開されます)、それを期待して、私はしかし、のいずれも、wxPanel、制御の作品のレイアウトから派生した場合、私が持っている問題は、
をしています子供たちはEVT_LEFT_DOWNなどのイベントを受け取ります。 event.Skip()を実行するメインコントロールのイベントを接続しようとしましたが、それは役に立ちませんでした。
私が代わりにwxControlから派生するために私のクラスを変更(もしくはwxFrame、または多分私が試した他の人の数)した場合、子供はがを行う制御イベントを取得するが、全体の事はサイザーで展開されません。子供のコントロールがはるかに多くのスペースを占めるにもかかわらず、小さな箱(10-20平方フィックス)で描画されます。
アップデート:私の主な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.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()
}
:mangoMixerStripインスタンス自体は、私が接続して任意のイベントを取得しますそれに対して、その子コントロールそうではありません。
wxPanelから派生させるのが正しい方法です。あなたのコントロールがイベントを受け取っていないのは不思議です。何が起こっているかを見るためにコードを投稿してください。 – ravenspoint
がコードで更新されました。 – tacospice