MFC之对话框 添加状态栏 实时显示时间
程序员文章站
2022-05-01 14:46:23
...
环境:win7 ,VS2010 对话框程序。
语言:C++
功能:1.在对话框程序中添加状态栏 2.在状态栏中显示时间。 3.时间实时更新。
逻辑:对话框中先手动添加状态栏。而后通过Ctime类获取系统时间实时显示到某一控件上。在主对话框中添加WM_Timer消息。一秒重新调用一次获取时间函数及控件显示的东西。
缺点:未实现居中显示。
源代码工程链接:http://download.csdn.net/download/i_likechard/9948145
一、.h文件添加
public:
CTime t1;//实例化一个时间类,用于保存获取的系统时间。
void ShowtimeNow();//定时器调用的刷新函数,将实时获取的系统时间反复写入。
void InitStatus();//初始化状态栏,此函数中将状态栏的显示进行初始化。
//CStatic m_time;//这是一个Static控件,也是显示的实时时间。此处注释掉了。
CStatusBar m_bar;//创建一个状态栏实例。
CRect rect; //实例一个Rect,这个东西后面对状态栏进行等分宽度用。
二、.cpp文件中添加
1.在OnInitDialog()函数中添加
InitStatus();
2.定义ShowtimeNow(),以及InitStatus()
void C*******Dlg::InitStatus()
{
//初始化状态栏,将状态栏设置为三列,前两列固定显示内容,第三列实时显示时间
static UINT BASED_CODEindicators[] = {
ID_STATUSBAR_0,
ID_STATUSBAR_1
};
m_bar.Create(this);
m_bar.SetIndicators(indicators,3);
GetClientRect(&rect); //获取当前对话框的宽度
CString str1;
t1 = CTime::GetCurrentTime();
str1=t1.Format("%Y年%m月%d日 %H:%M:%S");
//m_time.SetWindowTextA(str1);
//设置状态栏前两列显示内容。使用函数为SetPaneInfo(第几列,手工添加的StringTable(相当于字符串常量,等同于宏定义一个ID 代表某一字符串),显示风格,显示宽度)
m_bar.SetPaneInfo(0,ID_STATUSBAR_0, SBPS_POPOUT ,rect.Width()/3);
m_bar.SetPaneInfo(1,ID_STATUSBAR_1, SBPS_POPOUT ,rect.Width()/3);
//第三列显示时间
m_bar.SetPaneText(2, str1,1);
//设置状态栏填充颜色
m_bar.GetStatusBarCtrl().SetBkColor(RGB(255,255, 255));
//启动定时器,SetTimer(ID,间隔时间,窗口句柄(NULL时为默认))
SetTimer(1,1000,NULL);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, AFX_IDW_CONTROLBAR_FIRST);
}
void C******Dlg::ShowtimeNow()
{
CString str1;
//获取系统时间,并进行显示
t1 = CTime::GetCurrentTime();
str1=t1.Format("%Y年%m月%d日 %H:%M:%S");
//m_time.SetWindowTextA(str1);
//在状态栏的第三个列上显示时间
m_bar.SetPaneText(2, str1,1);
}
三、由于状态栏前两列用了StringTable,所以需要在资源文件中StringTable中新建两个ID名为ID_STATUSBAR_0何ID_STATUSBAR_1。
双击打开StringTable,而后右键右侧的表格,选择“新建字符串"。在ID行输入对应的ID名称,标题栏填写想要此ID代替的内容。
四、为该对话框添加定时器
在程序的资源文件中,右键该对话框。选择类向导。
在弹出的消息中添加如下代码:
void C******Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nIDEvent)
{
case 1:
ShowtimeNow(); //反复调用这个函数,进行时间显示刷新
break;
default:
break;
}
CDialogEx::OnTimer(nIDEvent);
}
五、软件运行结果
六、注意事项
1、在析构函数中调用killtimer()是个不错的选择。
推荐阅读