wxStatusBar 使用小记

来源:互联网 发布:语音打电话软件 编辑:程序博客网 时间:2024/06/05 23:41

每个 wxFrame 等窗口里面都有一个默认的 wxStatusBar ,但是这个默认的 StatusBar 只能做一些简单的事,比如用 wxLogStatus() 来写些字。

其实可以自己建一个继承 wxStatusBar 的类,这样就可以实现自己想要的功能。在 wxWidGets 的 samples 里面就演示有这样的做法。

我的要求不高,只是想给程序加一个处理时的进度条。我自己建了一个类,大概如下:

class MyStatusBar : public wxStatusBar
{
public:
    MyStatusBar(wxWindow 
*parent, wxWindowID id, long style = wxST_SIZEGRIP, const wxString& name = _T("statusBar"));
    
    
void SetRange(int n);
    
void SetValue(int n);

    
void OnSize(wxSizeEvent& event);

    
enum
    {
        Field_Text1,
        Field_Text2,
        Field_Status,
        Field_Process
    };

private:
    wxGauge    
*m_ProgressBar;

    DECLARE_EVENT_TABLE()
};

然后在构造函数里面初始化 wxGauge 的实例。特别是在 OnSize() 里面要加入一些处理,让进度条的大小始终和状态栏某一格子的大小一样。如下:

void MyStatusBar::OnSize(wxSizeEvent& event)
{
    wxRect rect;
    GetFieldRect(Field_Process, rect);

    m_ProgressBar
->SetSize(rect.x, rect.y, rect.width, rect.height);
}

但是,当我把进度条放在最后一个格的时候,它总是贴不到最右边。如下图。

好像右下角那个三角形总是存在的。既时最大化时,那个进度条也贴不到最右边。

目前我还不知道有什么好方法可以解决。所以我只能把进度条放在倒数第二个格子里面了。