hur.cn - 华软网

 热门搜索

关于状态栏的问题。

  作者:未知    来源:网络    更新时间:2011/9/16
1>在Resource标签String Table中添加New String,在此定义为ID_INDICATOR_CLOCK,将其Caption设为00: 00: 00(注意此处00与:之间不能有其他字符或符号).
注意,本步操作时有两种方式:
一种建立新的String Table,并添加String;另一种则在原有String Table
中添加。当用后一种方式操作时,若完成后,时钟栏并不显示时间,则需要将此
New String在String Table中对应的Value值加1(可在resource.h中修改)。
2>在MainFrm.cpp中的indicators声明出添加ID_INDICATOR_CLOCK,代码如下:

static UINT indicators[] =
{
ID_SEPARATOR, 
ID_INDICATOR_CLOCK, //这里排列影响显示顺序,s所要添加的String的ID
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

这一步中ID_INDICATOR_CLOCK的插入位置将影响时间窗格在状态栏中的显示位置。
3>安装定时器:在MainFrm.cpp中OnCreate函数处添加代码如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ ……
SetTimer(1,1000,NULL);//安装定时器,并将其时间间隔设为1000毫秒
return 0;
}
4)编写时间处理函数:利用ClassWizard为CMainFrame类加入WM_TIMER的消息处理函数OnTimer,并添加代码如下:
void CMainFrame::OnTimer(UINT nIDEvent) 
{
CTime time;
time=CTime::GetCurrentTime();//得到当前时间
CString s=time.Format("%H:%M:%S");//转换时间格式
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_CLOCK),s); //显示时钟
CFrameWnd::OnTimer(nIDEvent);}
5)销毁定时器:利用ClassWizard为CMainFrame类加入WM_CLOSE的消息处理函数OnClose,并添加代码如下:
void CMainFrame::OnClose() 
{ KillTimer(1);//销毁定时器
CFrameWnd::OnClose();}
最后,编译运行。
可以通过调用CStatusBar的成员函数SetPaneStyle,SetPaneInfo来设置你的时钟栏的显示方式。例如:在MainFrm .cpp中OnCreate函数处添加如下代码,即可将你的时钟栏pop out:
 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 {…
m_wndStatusBar.SetPaneInfo(m_wndStatusBar.CommandToIndex(ID_INDICATOR_CLOCK),ID_INDICATOR_CLOCK,SBPS_POPOUT,50); 
return 0;
}


以上为我创建状态栏的方法,创建完毕之后,显示如图所示,为什么时间并不显示出来呢?
---华软 网友回答---
在资源里面的字符串里面,定义ID_INDICATOR_CLOCK 为一个字符串,里面添加几个空格!
---华软网友回复---
MSDN有例子。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。