【问题标题】:wxWidgets: Properly making a user control that contains other controls inside itselfwxWidgets:正确地制作一个包含其他控件的用户控件
【发布时间】:2011-07-03 12:35:01
【问题描述】:

我正在尝试在 wxWidgets 中创建一个用户控件来表示音频混音器中的通道。因此,每个通道内部都有一组标准控件(一些滑块、按钮等)。

所以在我的课堂上我有一个sizer,我可以在其中添加我需要的各种子控件。到目前为止,这是可行的。

但我遇到的问题是

    1234563我尝试为运行 event.Skip() 的主控件连接一个事件,但这没有帮助。 1234563不会在它所在的 sizer 中展开,它只是被绘制成一个小盒子(大约 10-20 平方像素),即使子控件占用了更多空间。

有什么想法吗?

更新:

ma​​ngoMixerStrip.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 派生是正确的方法。奇怪的是您的控件没有收到事件。请发布您的代码,以便我们了解发生了什么。

标签: c++ wxwidgets


【解决方案1】:

您的控件应该是从 wxPanel 派生的类的子级,而不是面板父级的子级。

   faderPan = new mangoFader(parent, 200, false, 55);

应该是

  faderPan = new mangoFader(this, 200, false, 55);

【讨论】:

    【解决方案2】:

    如果你想使用 wxFrame,你也可以这样做。但是,您必须确保在创建框架后,向框架添加一个尺寸器,然后是一个面板,然后是另一个尺寸器。然后你可以把你想要的任何东西放在sizer中。由于某种原因,如果您不放置 sizer、panel、sizer,wxwidgets 将无法正确调整大小。

    【讨论】:

    • 哇!这听起来像是一种复杂的方法来做应该简单的事情!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多