(MFC ClassWizard)窗口,并选择Member Variables页; (2)添加成员变量m_Static1。在Member Variables页的Control Ids 框中选择标识符IDC_STATIC1,并点击[Add Variables?]按钮,弹出添加成员变量(Add Member Variables)对话框,在成员变量名(Member variables name)框内输入:m_Static1,并在种类(Category)、 变量类型(Variable type)框内依次输入或选择:Control、CStatic。按[OK]按钮,退出添加成员变量对话框;
(3)添加成员变量m_Static2。在Member Variables页的Control Ids 框中选择标识符IDC_STATIC2,并点击[Add Variables?]按钮,弹出添加成员变量(Add Member Variables)对话框,在成员变量名(Member variables name)框内输入:m_Static2,并在种类(Category)、变量类型(Variable type)框内依次输入或选择:Control、CStatic。按[OK]按钮,退出添加成员变量对话框;
(4)按[OK]按钮,退出类向导(MFC ClassWizard)窗口。 在项目管理区中双击CCh1Dlg类,这时程序代码窗口CCh1Dlg类的头文件中,可以看到如下代码: // Dialog Data
//{{AFX_DATA(CCh1Dlg)
enum { IDD = IDD_CH1_DIALOG };
CStatic m_Static2; //由类向导自动插入
CStatic m_Static1; //}}AFX_DATA
其中插入了CStatic 类型的成员变量m_Static1,该变量为静态控件对象,它通过标识符IDC_STATIC1与图1-2中所示的时钟静态框对应,而m_Static2则通过标识符IDC_STATIC2与日历框对应。
在项目管理区中展开CCh3_1Dlg类,双击OnInitDialog()函数,代码编辑窗口出现该函数
的代码,在该函数的结尾部分加上如下代码: BOOL CCh1Dlg::OnInitDialog( ) {
CDialog::OnInitDialog( ) ??
// TODO: Add extra initialization here CString str=_T(\
m_Static1.SetWindowText(str); //更改时钟框的内容 return TRUE; // return TRUE unless you set the focus to a control
重新编译链接该程序,执行后时钟框显示的内容为:10:10:10。
3.如何获取当前时间
为了使该静态框能正确显示当前时间,必须要解决两个问题,首先是如何获取当前系统时间,其次是如何才能不断及时地刷新时钟框的时间。 在MFC应用程序中,不但可以调用Windows API函数,也可以使用C语言运行库函数time_t time(time_t * timer);和struct tm *localtime(const time_t *timer); 要及时地刷新时钟框,需要有相应事件来触发。为此,可以通过加载系统定时器消息WM_TIMER的响应函数OnTimer( )来实现,用户可以通过SetTimer( )函数设定定时值,这样当定时时间一到,函数OnTimer( )就会自动响应。
我们已经在CCh1Dlg 类中加载了OnTimer( )函数,在项目管理工作区中展开CCh1Dlg类,双击OnTimer( ),将程序代码区的光标移到该函数,加入如下代码:
void CCh1Dlg::OnTimer(UINT nIDEvent) {
// TODO: Add your message handler code here and/or call default time_t m_time; tm *t;
int hour,hour1,min,sec; int year,mon,day,week; CString s;
CString s1[7]={\日\一\二\三\四\五\六\
time(&m_time); //获取当前时间值存入m_time t=localtime(&m_time); //转换为tm结构类型 hour=t->tm_hour; min=t->tm_min; sec=t->tm_sec;
hour1=hour; //24小时制转换成12小时制
year=t->tm_year+1900; mon=t->tm_mon+1; day=t->tm_mday; week=t->tm_wday;
s.Format(\ //将当前时钟送到IDC_STATIC1静态框显示 m_Static1.SetWindowText(s);
s.Format(\年-月\\n\\n -日\\n\\n 星期\ s+=s1[week];
//将当前日历送到IDC_STATIC2静态框显示 m_Static2.SetWindowText(s);
SetTimer(0,500,NULL); //重置定时器 CDialog::OnTimer(nIDEvent); }
为了启动系统定时器,须在CCh1Dlg类的初始化函数OnInitDialog( )中加入SetTimer( )函数,插入的位置如下: // TODO: Add extra initialization here CString str=_T(\
m_Static1.SetWindowText(str); //更改时钟框的内容 SetTimer(0,500,NULL); //重置定时器
return TRUE; // return TRUE unless you set the focus to a control }
编译、运行后如下图
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Visual C++基于对话框的MFC应用程序 - 简单的时钟实例实验一(2)在线全文阅读。
相关推荐: