C++ 如何清除状态栏文本wxc++;

C++ 如何清除状态栏文本wxc++;,c++,.net,wxwidgets,C++,.net,Wxwidgets,预期行为 清除以前的状态栏文本。 向状态栏添加新文本 实际行为 文本未清除,新文本添加在顶部,以前的文本溢出。每次创建新的wxStaticText时,将wxStatusBar作为父对象,而不是修改任何现有文本字段,此时您将创建一个附加文本对象并将状态栏设置为其父对象。这些文件将一直保存到删除为止 要更改状态栏中特定现有字段的文本,应使用bar->SetStatusText或bar->PushStatusText。这就足够了: void TestFrame::UpdateStatusBar(wx

预期行为

清除以前的状态栏文本。 向状态栏添加新文本

实际行为


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

每次创建新的wxStaticText时,将wxStatusBar作为父对象,而不是修改任何现有文本字段,此时您将创建一个附加文本对象并将状态栏设置为其父对象。这些文件将一直保存到删除为止

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

这就足够了:

 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);
}
请注意,我从GetStatusBar()中删除了
wxFrame::
,因为您的
TestFrame
来自
wxFrame

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

如何阻止它消失?状态栏不用于显示持久消息。为此使用单独的控件或
wxInfoBar
。如何阻止它消失?@StephenMooney,阻止什么消失?状态栏文本在一秒钟后消失。如果它消失,则您有另一个问题。如果可能,发布更多代码
void TestFrame::UpdateStatusBar(wxString color, wxString message)
{
    wxStatusBar* bar = GetStatusBar();
    bar->SetForegroundColour(wxColour(color));
    bar->SetStatusText(message, 0); //text in field 0
}