c/c++ vc 在mfc状态栏显示时间
在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间。其实通
过简单的代码,你就能创建一个有时钟显示的状态栏,并且还能设置时钟栏的显
示方式。举例如下:
首先,用MFC AppWizard按默认方式创建一个多文档界面的应用程序框架。
然后,编写代码:
1)在String Table中添加New String,在此定义为ID_INDICATOR_CLOCK,将
其Caption设为00:00:00(由于状态栏根据Caption确定时间窗格的缺省宽度,
使用此值将为时间的显示预留空间)。注意,本步 *** 作时有两种方式:
一种建立新的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, //这里排列影响显示顺序
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)
{// TODO: Add your message handler code here and/or call default
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()
{// TODO: Add your message handler code here and/or call default
KillTime...
如果你是用VC6.0的话,多线程也不好解决,得把工具栏窗口放到另一个线程里。这个问题产生的原因在于VC6.0产生的MFC程序只有一个线程,因此所有的窗口的消息处理都在一个线程里,但是倘若要同时让两个窗口都各自响应自己的消息,那么它们各自的处理程序就不能在同一线程里。当鼠标拖着不放的时候,只让工具栏的窗口工作,主窗口被阻塞就算有消息也不能处理。在VS2010中,MFC提供了5个线程,没有出现这种情况。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)