您的位置:首页 > 其它

在状态栏中显示滚动文本

2010-04-02 13:11 246 查看
在状态栏中显示滚动文本

CStatusBar的使用方法:
1、创建CStatusBar对象
2、使用CStatusBar::Create(),将CStatusBar对象和窗口对象捆绑;
3、使用CStatusBar::SetIndicators(),将每一个Indicators与字符串ID相对应。

改变CStatusBar pane有三种方法:
1、调用CWnd::SetWindowText()改变PANE 0;
2、在ON_UPDATE_COMMAND_UI handler中调用方法 CCmdUI::SetText()函数;
3、调用 SetPaneText()改变任何PANE

BOOL SetPaneText(
int nIndex,
LPCTSTR lpszNewText,
BOOL bUpdate = TRUE
);
nIndex设置字符串的索引号,lpszNewText是新的要显示的字符串指针,如bUpdate为TRUE,文本设置后窗口被重绘。

另外一个用到的函数是:
CStatusBar::CommandToIndex
int CommandToIndex(
UINT nIDFind
) const;
nIDFind是字符串资源ID,该函数的返回值为该字符串ID对应的indicator[]数组的索引;

下面是程序的具体实现:
1、使用CLASSVIEW生成一个以CStatusBar为基类的新类CSrollStatus
2、在修改MainFrm.h修改如下的代码:
//CStatusBar m_wndStatusBar;
CSrollStatus m_wndStatusBar;
3、修改MainFrm.cpp的indicators[]数组,IDS_SCROLL_PANE显示滚动文本对应的字符串资源ID。
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
IDS_SCROLL_PANE,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
4、修改CMainFrame的OnCreate函数
{
....

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar/n");
return -1; // fail to create
}
m_wndStatusBar.SetDisplayString(" Hello World ");
m_wndStatusBar.StartDisplay();
...
}

5、修改CSrollStatus类
void CSrollStatus::SetDisplayString(LPCTSTR str)
{
m_strSCrollText=str;
m_strSCrollText+=m_strSCrollText;//显示方便

}

void CSrollStatus::StartDisplay()
{
KillTimer(1);
SetTimer(1,200,NULL);

}

void CSrollStatus::OnDestroy()
{
CStatusBar::OnDestroy();
KillTimer(1);

}

void CSrollStatus::OnTimer(UINT nIDEvent)
{

if(m_strSCrollText,IsEmpty())
{
KillTimer(1);
SetPaneText(CommandToIndex(IDS_SCROLL_PANE),"");
return ;
}

static UINT index=0;
if(index>=(UINT)m_strSCrollText.GetLength()/2)-1)
index=0;
SetPaneText(CommandToIndex(IDS_SCROLL_PANE),((LPCSTR)m_strSCrollText)+index);
index++;
CStatusBar::OnTimer(nIDEvent);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: