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);
}
预期行为
清除以前的状态栏文字。 将新文本添加到状态栏
实际行为
文本未清除,顶部添加了新文本,之前的文本溢出。
答案 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
)或其他控件)到状态栏。但这需要自己处理状态栏的大小事件并定位添加的控件 -