操作都会出错
3 个解决方案
#1
本例将在对话框中加入一个运行时不可见的计时控件Timer Object。该控件在一个的预定的时间间隔过去之后引发 Timer 事件,该时间间隔储存于该控件的Interval 属性中,它以千分之一秒为单位指定时间的长度。本例用一个成员变量m_num来计数,每隔一个Interval时间递增1,当m_num计到10时,重置为0,并将时间间隔m_Interval增加200毫秒,并分别在两个静态框中显示当前的m_num和m_Interval。步骤如下:
1、用组件廊将Timer控件加入到项目Test中。
2、在项目中插入一个新的对话框,类名为CTestDlg。
3、在对话框模板中加入控件Timer Object(包裹类为CIeTimer),如图2的右下角。打开属性对话框,设置ID为IDC_TIMER1。再切换至All属性页,设置Interval为200。
4、在对话框模板中添加静态控件,Caption为“The current interval is:”。
5、添加一个不带Caption的静态控件,打开属性对话框,设置ID为IDC_STATIC1。再切换至Extended Styles属性页,选中Static edge复选框。
6、按下Ctrl键的同时双击静态控件IDC_STATIC1,弹出Add Member Variable对话框,第一项中填写变量名m_text1,Category项中选择Control,Variable type项中选择CStatic。
7、添加静态控件"The current number is:"。
8、重复步骤5到步骤6,添加一个不带Caption的静态控件(ID为IDC_STATIC2),变量名为m_text2。
9、运行ClassWizard并选择Message Map属性页,在Class name 中选择CTestDlg,Object IDs中选择IDC_TIMER1,在Messages中选择Timer,点击Add Function…按钮,加入OnTimerTimer1()处理函数。
采用第一种方法,则按前面所述步骤用ClassWizard给此控件类添加一个成员变量m_timer,并在OnTimerTimer1函数中添加如下代码:
void CTestDlg::OnTimerTimer1() // TODO: Add your control notification handler code here //
char buf[10];
m_num++;
if(m_num>=10)
{
m_num=0;
m_interval+=200;
m_timer.SetInterval(m_interval);
}
_itoa(m_interval,buf,10);
m_text1.SetWindowText (buf);
_itoa(m_num,buf,10);
m_text2.SetWindowText (buf);
若采用第二种方法,则不需要添加此控件类的成员变量,只需将加灰显示的语句用下列语句代替即可:
CIeTimer m_timer;
m_timer.SubclassDlgItem(IDC_TIMER1,this);
m_timer.SetInterval(m_interval);
m_timer.UnsubclassWindow();
运行之后可以看到计数的步调越来越慢了(因为时间间隔越来越大)
1、用组件廊将Timer控件加入到项目Test中。
2、在项目中插入一个新的对话框,类名为CTestDlg。
3、在对话框模板中加入控件Timer Object(包裹类为CIeTimer),如图2的右下角。打开属性对话框,设置ID为IDC_TIMER1。再切换至All属性页,设置Interval为200。
4、在对话框模板中添加静态控件,Caption为“The current interval is:”。
5、添加一个不带Caption的静态控件,打开属性对话框,设置ID为IDC_STATIC1。再切换至Extended Styles属性页,选中Static edge复选框。
6、按下Ctrl键的同时双击静态控件IDC_STATIC1,弹出Add Member Variable对话框,第一项中填写变量名m_text1,Category项中选择Control,Variable type项中选择CStatic。
7、添加静态控件"The current number is:"。
8、重复步骤5到步骤6,添加一个不带Caption的静态控件(ID为IDC_STATIC2),变量名为m_text2。
9、运行ClassWizard并选择Message Map属性页,在Class name 中选择CTestDlg,Object IDs中选择IDC_TIMER1,在Messages中选择Timer,点击Add Function…按钮,加入OnTimerTimer1()处理函数。
采用第一种方法,则按前面所述步骤用ClassWizard给此控件类添加一个成员变量m_timer,并在OnTimerTimer1函数中添加如下代码:
void CTestDlg::OnTimerTimer1() // TODO: Add your control notification handler code here //
char buf[10];
m_num++;
if(m_num>=10)
{
m_num=0;
m_interval+=200;
m_timer.SetInterval(m_interval);
}
_itoa(m_interval,buf,10);
m_text1.SetWindowText (buf);
_itoa(m_num,buf,10);
m_text2.SetWindowText (buf);
若采用第二种方法,则不需要添加此控件类的成员变量,只需将加灰显示的语句用下列语句代替即可:
CIeTimer m_timer;
m_timer.SubclassDlgItem(IDC_TIMER1,this);
m_timer.SetInterval(m_interval);
m_timer.UnsubclassWindow();
运行之后可以看到计数的步调越来越慢了(因为时间间隔越来越大)
#2
再你的ActiveX的构造函数里调用
RecreateControlWindow();
然后再SetTimer(1,1000,NULL);就可以通过OnTimer(UINT nIDEvent) 相应时钟消息了
RecreateControlWindow();
然后再SetTimer(1,1000,NULL);就可以通过OnTimer(UINT nIDEvent) 相应时钟消息了
#3
多谢
#1
本例将在对话框中加入一个运行时不可见的计时控件Timer Object。该控件在一个的预定的时间间隔过去之后引发 Timer 事件,该时间间隔储存于该控件的Interval 属性中,它以千分之一秒为单位指定时间的长度。本例用一个成员变量m_num来计数,每隔一个Interval时间递增1,当m_num计到10时,重置为0,并将时间间隔m_Interval增加200毫秒,并分别在两个静态框中显示当前的m_num和m_Interval。步骤如下:
1、用组件廊将Timer控件加入到项目Test中。
2、在项目中插入一个新的对话框,类名为CTestDlg。
3、在对话框模板中加入控件Timer Object(包裹类为CIeTimer),如图2的右下角。打开属性对话框,设置ID为IDC_TIMER1。再切换至All属性页,设置Interval为200。
4、在对话框模板中添加静态控件,Caption为“The current interval is:”。
5、添加一个不带Caption的静态控件,打开属性对话框,设置ID为IDC_STATIC1。再切换至Extended Styles属性页,选中Static edge复选框。
6、按下Ctrl键的同时双击静态控件IDC_STATIC1,弹出Add Member Variable对话框,第一项中填写变量名m_text1,Category项中选择Control,Variable type项中选择CStatic。
7、添加静态控件"The current number is:"。
8、重复步骤5到步骤6,添加一个不带Caption的静态控件(ID为IDC_STATIC2),变量名为m_text2。
9、运行ClassWizard并选择Message Map属性页,在Class name 中选择CTestDlg,Object IDs中选择IDC_TIMER1,在Messages中选择Timer,点击Add Function…按钮,加入OnTimerTimer1()处理函数。
采用第一种方法,则按前面所述步骤用ClassWizard给此控件类添加一个成员变量m_timer,并在OnTimerTimer1函数中添加如下代码:
void CTestDlg::OnTimerTimer1() // TODO: Add your control notification handler code here //
char buf[10];
m_num++;
if(m_num>=10)
{
m_num=0;
m_interval+=200;
m_timer.SetInterval(m_interval);
}
_itoa(m_interval,buf,10);
m_text1.SetWindowText (buf);
_itoa(m_num,buf,10);
m_text2.SetWindowText (buf);
若采用第二种方法,则不需要添加此控件类的成员变量,只需将加灰显示的语句用下列语句代替即可:
CIeTimer m_timer;
m_timer.SubclassDlgItem(IDC_TIMER1,this);
m_timer.SetInterval(m_interval);
m_timer.UnsubclassWindow();
运行之后可以看到计数的步调越来越慢了(因为时间间隔越来越大)
1、用组件廊将Timer控件加入到项目Test中。
2、在项目中插入一个新的对话框,类名为CTestDlg。
3、在对话框模板中加入控件Timer Object(包裹类为CIeTimer),如图2的右下角。打开属性对话框,设置ID为IDC_TIMER1。再切换至All属性页,设置Interval为200。
4、在对话框模板中添加静态控件,Caption为“The current interval is:”。
5、添加一个不带Caption的静态控件,打开属性对话框,设置ID为IDC_STATIC1。再切换至Extended Styles属性页,选中Static edge复选框。
6、按下Ctrl键的同时双击静态控件IDC_STATIC1,弹出Add Member Variable对话框,第一项中填写变量名m_text1,Category项中选择Control,Variable type项中选择CStatic。
7、添加静态控件"The current number is:"。
8、重复步骤5到步骤6,添加一个不带Caption的静态控件(ID为IDC_STATIC2),变量名为m_text2。
9、运行ClassWizard并选择Message Map属性页,在Class name 中选择CTestDlg,Object IDs中选择IDC_TIMER1,在Messages中选择Timer,点击Add Function…按钮,加入OnTimerTimer1()处理函数。
采用第一种方法,则按前面所述步骤用ClassWizard给此控件类添加一个成员变量m_timer,并在OnTimerTimer1函数中添加如下代码:
void CTestDlg::OnTimerTimer1() // TODO: Add your control notification handler code here //
char buf[10];
m_num++;
if(m_num>=10)
{
m_num=0;
m_interval+=200;
m_timer.SetInterval(m_interval);
}
_itoa(m_interval,buf,10);
m_text1.SetWindowText (buf);
_itoa(m_num,buf,10);
m_text2.SetWindowText (buf);
若采用第二种方法,则不需要添加此控件类的成员变量,只需将加灰显示的语句用下列语句代替即可:
CIeTimer m_timer;
m_timer.SubclassDlgItem(IDC_TIMER1,this);
m_timer.SetInterval(m_interval);
m_timer.UnsubclassWindow();
运行之后可以看到计数的步调越来越慢了(因为时间间隔越来越大)
#2
再你的ActiveX的构造函数里调用
RecreateControlWindow();
然后再SetTimer(1,1000,NULL);就可以通过OnTimer(UINT nIDEvent) 相应时钟消息了
RecreateControlWindow();
然后再SetTimer(1,1000,NULL);就可以通过OnTimer(UINT nIDEvent) 相应时钟消息了
#3
多谢