wxStatusBar 使用小记

每个 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);
}

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

wxStatusBar 使用小记_第1张图片

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

wxStatusBar 使用小记_第2张图片

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

你可能感兴趣的:(table,Class)