我如何清除状态栏文本wxwidgets c ++

时间:2017-09-15 10:26:40

标签: c++ .net wxwidgets

 void TestFrame::UpdateStatusBar(wxString color, wxString message)
{
  wxStatusBar* bar = wxFrame::GetStatusBar();
  bar->SetStatusText("", 0);
  wxStaticText* txt = new wxStaticText(bar, wxID_ANY, wxT(""), wxPoint(10, 5), wxDefaultSize, 0);
 bar->SetForegroundColour(wxColour(color));
 txt = new wxStaticText(bar, wxID_ANY, message, wxPoint(10, 5), wxDefaultSize, 0);
  txt->Show(true);
}

预期行为

清除以前的状态栏文字。 将新文本添加到状态栏

实际行为

文本未清除,顶部添加了新文本,之前的文本溢出。

2 个答案:

答案 0 :(得分:2)

每次使用wxStatusBar作为父项创建新的wxStaticText时,不是修改任何现有文本字段,而是创建其他文本对象并将状态栏设置为其父项。然后它们将一直存在,直到它们被删除。

如果要更改状态栏中特定现有字段的文本,则应使用bar-> SetStatusText或bar-> PushStatusText。

答案 1 :(得分:0)

这足够了:

void TestFrame::UpdateStatusBar(wxString color, wxString message)
{
    wxStatusBar* bar = GetStatusBar();
    bar->SetForegroundColour(wxColour(color));
    bar->SetStatusText(message, 0); //text in field 0
}

请注意,我从GetStatusBar()中删除了wxFrame::,因为TestFrame来自wxFrame

您可以添加wxStaticText)或其他控件)到状态栏。但这需要自己处理状态栏的大小事件并定位添加的控件 -