settimer头文件(vc6.0的settimer函数)

2024-07-22 02:22:58 80

settimer头文件(vc6.0的settimer函数)

本文目录

vc6.0的settimer函数


SetTimer函数的原型
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT nElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
as应该是函数地址,肯定跟”resource.h“没关系

C语言编译的问题


1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include “stdafx.h“)
2、fatal error C1083: Cannot open include file: ’R…….h’: No such file or directory
不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: ’C……’: ’class’ type redefinition
类“C……”重定义。
4、error C2018: unknown character ’0xa3’
不认识的字符’0xa3’。(一般是汉字或中文标点符号)
5、error C2057: expected constant expression
希望是常量表达式。(一般出现在switch语句的case分支中)
6、error C2065: ’IDD_MYDIALOG’ : undeclared identifier
“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter ’bReset’
函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ’:’ before ’{’
句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ’;’ before identifier ’dc’
句法错误:在“dc”前丢了“;”。
10、error C2196: case value ’69’ already used
值69已经用过。(一般出现在switch语句的case分支中)
11、error C2509: ’OnTimer’ : member function not declared in ’CHelloView’
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: ’reset’: overloaded member function ’void (int)’ not found in ’B’
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: ’B::f1’: overriding virtual function differs from ’A::f1’ only by return type or calling convention
类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: ’SetTimer’ : function does not take 2 parameters
“SetTimer”函数不传递2个参数。
15、warning C4035: ’f……’: no return value
“f……”的return语句没有返回值。
16、warning C4553: ’= =’ : operator has no effect; did you intend ’=’?
没有效果的运算符“= =”;是否改为“=”?
17、warning C4700: local variable ’bReset’ used without having been initialized
局部变量“bReset”没有初始化就使用。
18、error C4716: ’CMyApp::InitInstance’ : must return a value
“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing
连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)
20、error LNK2001: unresolved external symbol “public: virtual _ _thiscall C……::~C……(void)“
连接时发现没有实现的外部符号(变量、函数等)。
function call missing argument list 调用函数的时候没有给参数。
member function definition looks like a ctor, but name does not match enclosing class 成员函数声明了但没有使用
unexpected end of file while looking for precompiled header directive 在寻找预编译头文件时文件意外结束,编译不正常终止可能造成这种情况
希望对你能有所帮助。

c语言时间处理函数


C语言的标准库函数包括一系列日期和时间处理函数,它们都在头文件中说明。
在头文件中定义了三种类型:time_t,struct tm和clock_t。
下面列出了这些函数。
time_t time(time_t *timer);
double difftime(time_t time1,time_t time2);
struct tm *gmtime(const time_t *timer);
struct tm *localtime(const time_t *timer);
char *asctime(const struct tm *timeptr);
char *ctime(const time_t *timer);
size_t strftime(char *s,size_t maxsize,const char *format,const struct tm *timeptr);
time_t mktime(struct tm *timeptr);
clock_t clock(void);
【具体应用举例】
asctime(将时间和日期以字符串格式表示)
相关函数
time,ctime,gmtime,localtime
表头文件
#i nclude
定义函数
char * asctime(const struct tm * timeptr);
函数说明
asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。
此函数已经由时区转换成当地时间,字符串格式为:“Wed Jun 30 21:49:08 1993\n“
返回值
若再调用相关的时间日期函数,此字符串可能会被破坏。此函数与ctime不同处在于传入的参数是不同的结构。
附加说明
返回一字符串表示目前当地的时间日期。
范例
#i nclude
main()
{
time_t timep;
time (&timep);
printf(“%s“,asctime(gmtime(&timep)));
}
执行
Sat Oct 28 02:10:06 2000
 
ctime(将时间和日期以字符串格式表示)
相关函数
time,asctime,gmtime,localtime
表头文件
#i nclude
定义函数
char *ctime(const time_t *timep);
函数说明
ctime ()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。
此函数已经由时区转换成当地时间,字符串格式为“Wed Jun 30 21 :49 :08 1993\n“。若再调用相关的时间日期函数,此字符串可能会被破坏。
返回值
返回一字符串表示目前当地的时间日期。
范例
#i nclude
main()
{
time_t timep;
time (&timep);
printf(“%s“,ctime(&timep));
}
执行
Sat Oct 28 10 : 12 : 05 2000
 
gettimeofday(取得目前的时间)
相关函数
time,ctime,ftime,settimeofday
表头文件
#i nclude
#i nclude
定义函数
int gettimeofday ( struct timeval * tv , struct timezone * tz )
函数说明
gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz所指的结构中。
timeval结构定义为:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 结构定义为:
struct timezone{
int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/
int tz_dsttime; /*日光节约时间的状态*/
};
上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime 所代表的状态如下
DST_NONE /*不使用*/
DST_USA /*美国*/
DST_AUST /*澳洲*/
DST_WET /*西欧*/
DST_MET /*中欧*/
DST_EET /*东欧*/
DST_CAN /*加拿大*/
DST_GB /*大不列颠*/
DST_RUM /*罗马尼亚*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以后)*/
返回值
成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存取权限。
范例
#i nclude
#i nclude
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(“tv_sec; %d\n“, tv,.tv_sec) ;
printf(“tv_usec; %d\n“,tv.tv_usec);
printf(“tz_minuteswest; %d\n“, tz.tz_minuteswest);
printf(“tz_dsttime, %d\n“,tz.tz_dsttime);
}
执行
tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
 
gmtime(取得目前时间和日期)
相关函数
time,asctime,ctime,localtime
表头文件
#i nclude
定义函数
struct tm*gmtime(const time_t*timep);
函数说明
gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
结构tm的定义为
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
int tm_sec 代表目前秒数,正常范围为0-59,但允许至61秒
int tm_min 代表目前分数,范围0-59
int tm_hour 从午夜算起的时数,范围为0-23
int tm_mday 目前月份的日数,范围01-31
int tm_mon 代表目前月份,从一月算起,范围从0-11
int tm_year 从1900 年算起至今的年数
int tm_wday 一星期的日数,从星期一算起,范围为0-6
int tm_yday 从今年1月1日算起至今的天数,范围为0-365
int tm_isdst 日光节约时间的旗标
此函数返回的时间日期未经时区转换,而是UTC时间。
返回值
返回结构tm代表目前UTC 时间
范例
#i nclude
main(){
char *wday={“Sun“,“Mon“,“Tue“,“Wed“,“Thu“,“Fri“,“Sat“};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf(“%d%d%d“,(1900+p-》tm_year), (1+p-》tm_mon),p-》tm_mday);
printf(“%s%d;%d;%d\n“, wday[p-》tm_wday], p-》tm_hour, p-》tm_min, p-》tm_sec);
}
执行
2000/10/28 Sat 8:15:38
 
localtime(取得当地目前时间和日期)
相关函数
time, asctime, ctime, gmtime
表头文件
#i nclude
定义函数
struct tm *localtime(const time_t * timep);
函数说明
localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
结构tm的定义请参考gmtime()。此函
数返回的时间日期已经转换成当地时区。
返回值
返回结构tm代表目前的当地时间。
范例
#i nclude
main(){
char *wday={“Sun“,“Mon“,“Tue“,“Wed“,“Thu“,“Fri“,“Sat“};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /*取得当地时间*/
printf (“%d%d%d “, (1900+p-》tm_year),( l+p-》tm_mon), p-》tm_mday);
printf(“%s%d:%d:%d\n“, wday[p-》tm_wday],p-》tm_hour, p-》tm_min, p-》tm_sec);
}
执行
2000/10/28 Sat 11:12:22
 
mktime(将时间结构数据转换成经过的秒数)
相关函数
time,asctime,gmtime,localtime
表头文件
#i nclude
定义函数
time_t mktime(strcut tm * timeptr);
函数说明
mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。
返回值
返回经过的秒数。
范例
/* 用time()取得时间(秒数),利用localtime()
转换成struct tm 再利用mktine()将struct tm转换成原来的秒数*/
#i nclude
main()
{
time_t timep;
strcut tm *p;
time(&timep);
printf(“time() : %d \n“,timep);
p=localtime(&timep);
timep = mktime(p);
printf(“time()-》localtime()-》mktime():%d\n“,timep);
}
执行
time():974943297
time()-》localtime()-》mktime():974943297
 
settimeofday(设置目前时间)
相关函数
time,ctime,ftime,gettimeofday
表头文件
#i nclude
#i nclude
定义函数
int settimeofday ( const struct timeval *tv,const struct timezone *tz);
函数说明
settimeofday()会把目前时间设成由tv所指的结构信息,当地时区信息则设成tz所指的结构。详细的说明请参考gettimeofday()。
注意,只有root权限才能使用此函数修改时间。
返回值
成功则返回0,失败返回-1,错误代码存于errno。
错误代码
EPERM 并非由root权限调用settimeofday(),权限不够。
EINVAL 时区或某个数据是不正确的,无法正确设置时间。
 
time(取得目前的时间)
相关函数
ctime,ftime,gettimeofday
表头文件
#i nclude
定义函数
time_t time(time_t *t);
函数说明
此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t 并非空指针的话,
此函数也会将返回值存到t指针所指的内存。
返回值
成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。
范例
#i nclude
mian()
{
int seconds= time((time_t*)NULL);
printf(“%d\n“,seconds);
}
Date and Time Functions: 《time.h》
The header 《time.h》 declares types and functions for manipulating date and time. Some functions process local time,
which may differ from calendar time, for example because of time zone. clock_t and time_t are arithmetic types
representing times, and struct tm holds the components
of a calendar time:
int tm_sec; seconds after the minute (0,61)
int tm_min; minutes after the hour (0,59)
int tm_hour; hours since midnight (0,23)
int tm_mday; day of the month (1,31)
int tm_mon; months since January (0,11)
int tm_year; years since 1900
int tm_wday; days since Sunday (0,6)
int tm_yday; days since January 1 (0,365)
int tm_isdst; Daylight Saving Time flag
tm_isdst is positive if Daylight Saving Time is in effect, zero if not, and negative if the information is not available.
clock_t clock(void)
clock returns the processor time used by the program since the beginning of execution, or -1 if unavailable.
clock()/CLK_PER_SEC is a time in
seconds.
time_t time(time_t *tp)
time returns the current calendar time or -1 if the time is not available. If tp is not NULL,
the return value is also assigned to *tp.
double difftime(time_t time2, time_t time1)
difftime returns time2-time1 expressed in seconds.
time_t mktime(struct tm *tp)
mktime converts the local time in the structure *tp into calendar time in the same representation used by time.
The components will have values
in the ranges shown. mktime returns the calendar time or -1 if it cannot be represented.
The next four functions return pointers to static objects that may be overwritten by other calls.
char *asctime(const struct tm *tp)
asctime*tp into a string of the form
Sun Jan 3 15:14:13 1988\n\0
char *ctime(const time_t *tp)
ctime converts the calendar time *tp to local time; it is equivalent to
asctime(localtime(tp))
struct tm *gmtime(const time_t *tp)
gmtime converts the calendar time *tp into Coordinated Universal Time (UTC). It returns NULL if UTC is not available.
The name gmtime has historical significance.
struct tm *localtime(const time_t *tp)
localtime converts the calendar time *tp into local time.
size_t strftime(char *s, size_t smax, const char *fmt, const struct tm *tp)
strftime formats date and time information from *tp into s according to fmt, which is analogous to a printf format.
Ordinary characters (including the terminating ’\0’) are copied into s. Each %c is replaced as described below,
using values appropriate for the local environment.
No more than smax characters are placed into s. strftime returns the number of characters, excluding the ’\0’,
or zero if more than smax characters were produced.
%a abbreviated weekday name.
%A full weekday name.
%b abbreviated month name.
%B full month name.
%c local date and time representation.
%d day of the month (01-31).
%H hour (24-hour clock) (00-23).
%I hour (12-hour clock) (01-12).
%j day of the year (001-366).
%m month (01-12).
%M minute (00-59).
%p local equivalent of AM or PM.
%S second (00-61).
%U week number of the year (Sunday as 1st day of week) (00-53).
%w weekday (0-6, Sunday is 0).
%W week number of the year (Monday as 1st day of week) (00-53).
%x local date representation.
%X local time representation.
%y year without century (00-99).
%Y year with century.
%Z time zone name, if any.
%% %

MFC 单个SetTimer怎么用啊


Timer事件,即定时器事件,是在游戏编程中,经常使用的一个事件。借助它可以产生定时执行动作的效果。这篇文章,就和大家一起探讨一下如何使用SetTimer()函数。
1、SetTimer定义在那里?
SetTimer表示的是定义个定时器。根据定义指定的窗口,在指定的窗口(CWnd)中实现OnTimer事件,这样,就可以相应事件了。
SetTimer有两个函数。一个是全局的函数::SetTimer()
UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);

其中hWnd 是指向CWnd的指针,即处理Timer事件的窗口类。说道窗口类(CWnd),我们有必要来看一下CWnd的继承情况:CWnd有以下子类:CFrameWnd,CDialog,CView,CControlBar等类。这也意味这些类中都可以定义SetTimer事件。
同时,SetTimer()在CWnd中也有定义,即SetTimer()是CWnd的一个成员函数。CWnd的子类可以调用该函数,来设置触发器。

UINT SetTimer( UINT nIDEvent, UINTnElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );
参数含义:
nIDEvent:是指设置这个定时器的iD,即身份标志,这样在OnTimer()事件中,才能根据不同的定时器,来做不同的事件响应。这个ID是一个无符号的整型。
nElapse
是指时间延迟。单位是毫秒。这意味着,每隔nElapse毫秒系统调用一次Ontimer()。
void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD)
Specifies the address of the application-suppliedTimerProc callback function that processes theWM_TIMER messages. If this parameter is NULL, theWM_TIMER messages are placed in the application’s message queue and handled by theCWnd object。
意思是,指定应用程序提供的TimerProc回调函数的地址,来处里这个Timer事件。如果是NULL,处理这个Timer事件的定义这个Timer的CWnd对象。他将WM_TIMER消息传递给这个对象,通过实现这个对象的OnTimer()事件来处理这个Timer事件。
所以,一般情况下,我们将这个值设为NULL,有设置该定时器的对象中的OnTimer()函数来处理这个事件。
同样的,我们再看看KillTimer()和OnTimer()的定义:
KillTimer同SetTimer()一样,他也有两个,一个是全局的::KillTimer(),另一个是CWnd的一个函数。他的声明如下:

//全局函数
BOOL KillTimer(
HWND hWnd, // handle of window that installed timer
UINT uIDEvent // timer identifier
);
//CWnd函数
BOOL KillTimer( int nIDEvent);
这两个函数表示的意思是将iD为nIDEVENT的定时器移走。使其不再作用。其用法如同SetTimer()一样。
再看看OnTimer()
CWnd::OnTimer
afx_msg void OnTimer( UINT nIDEvent);
ontimer()是响应CWnd对象产生的WM_Timer消息。nIDEvent表示要响应TIMER事件的ID。

二、Timer事件的使用:
由以上的分析,我们应该很清楚,如何来使用Timer事件。假定我们在视图上画一个渐变的动画。我们首先在菜单栏上添加一个菜单项,给这个菜单添加命令响应:
pView-》SetTimer(1,1000,NULL);//pView是视图类的指针,这里是在视图类当中设置一个定时器。
添加完毕,再给视图类添加一个WM_Timer事件的相应。在OnTimer()函数中编写汉书,进行相应。
如此,就能做出动画。
SetTimer(1,1000,NULL);//1为定时器的ID 1000为他的执行毫秒 最后一个通常为NULL
VC6.0:
建立类向导-找到你当前的XXXXDlg类 找到WM_TIMER 点add那个按钮 再点Edit按钮[就是add下面的]
就会进一个代码区 别动 然后把中间的那句绿色的TODO什么的去掉 写:
if(nidevent == 1)//判断那个定时器的ID
{

a++;
}
1表示定时器的ID,1000表示没1000ms也就是1s调用一次处理函数,最后一个参数是处理的函数,如果填NULL表示,使用系统默认的,默认处理函数是OnTimer()那个函数,在这里面写你要执行的操作就可以了,如果你有多个定时器要在这里写if(id == 1)类似的东西去区分不同的定时器,更换贴图最好是在OnTimer里面更换当前显示的图片编号,然后刷新界面,更换图片的工作让OnPaint去做,让他们各司其职。关闭定时器:KillTimer(1)
启动计时器
UINT ID_TIMER1 = 1 , ID_TIMER2 = 2 //设置id
然后再你需要的时机依次启动各个计时器:
SetTimer(ID_TIMER1 , 300);
……
SetTimer(ID_TIMER2 , 400);
……
……
OnTimer函数中这样写:
void CMyClass::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case ID_TIMER1:
// id为1的计时器要做的事。
……
break;
case ID_TIMER2:
//id为2的计时器要做的事。
……
break;
……
……
}
}
一 SetTimer函数的用法
1) 函数原型及变形
SetTimer这个API函数的原型 :
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
回调函数:在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函数。
例如 :
SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了
于是SetTimer函数的原型变为:
UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)) ,用法如:SetTimer(1,1000,NULL);
2)函数生成方法
在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。
每隔一段时间就会自动执行一次。
3) 回调函数的格式
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
二. 多个Timer
把ID的值设为〉1的数,如:SetTimer(3,500,NULL);
由WINDOWS会协调他们的然onTimer函数要在函数体内添加每一个timer的处理代码:
onTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:........;
break;
case 2:.......;
break;
case 3:......;
break;
}
三、KillTimer:取消定时器不再使用定时器后,我们应该调用KillTimer来取消定时。
KillTimer的原型:
BOOL KillTimer(HWND hWnd, // 窗口句柄
UINT_PTR uIDEvent // ID);
在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器
什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了。 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。
1.1 用WM_TIMER来设置定时器
先请看SetTimer这个API函数的原型
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
例如
SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了
于是SetTimer函数的原型变为:
UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))
当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识,也就是名字。nElapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成onTime函数:在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。
例:
SetTimer(1,1000,NULL);
1:计时器的名称;
1000:时间间隔,单位是毫秒;
NULL:使用onTime函数。
当不需要计时器的时候调用KillTimer(nIDEvent);
例如:KillTimer(1);
1.2 调用回调函数
此方法首先写一个如下格式的回调函数
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。
二. 或许你会问,如果我要加入两个或者两个以上的 timer怎么办?
继续用SetTimer函数吧,上次的timer的ID是1,这次可以是2,3,4。。。。
SetTimer(2,1000,NULL);
SetTimer(3,500,NULL);
嗯,WINDOWS会协调他们的。当然onTimer函数体也要发生变化,要在函数体内添加每一个timer的处理代码:
onTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:........;
break;
case 2:.......;
break;
case 3:......;
break;
}
}
你在OnTimer里,先计算,然后Invalidate了,这样做很不错,可进入Draw里,又让Draw负责椭圆的计算工作,是不是应该这样做:
1)定义个CRect m_rectEllipse;
2)在OnTimer中计算m_rectEllipse,在按键按下时也可以计算这个m_rectEllipse。
3)在Draw里只负责画椭圆,其他都不做。
4)程序还有可以改进的地方,如闪屏会出现吗?定时器分辨率较高时应该会吧!呵呵,说下去一大堆了。
P.S.把程序模块调整一下,然后立刻就能发现问题所在了,很好找。
首先在这里说一下,我使用的环境是VS2005。先说一下步骤,然后贴出代码。
步骤1:建立基于Dialog的MFC工程;
步骤2:在对话框上添加两个静态框,分别为“1秒中刷新一次”和“2秒刷新一次” 。两个编辑框,分别为“IDC_EDIT1”和“IDC_EDIT2“,默认情况下就是这样的。然后在对应的对话框类中添加两个成员变量:
m_nData1 和 m_nData2
然后把编辑框的ReadOnly都改为TRUE 。
步骤3:点击OK按钮,在其中添加代码,如下:
[html] view plaincopyprint?
void CMFCTimerDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
SetTimer(1, 2000, NULL) ;
SetTimer(2, 1000, NULL) ;
//OnOK();
}
步骤4:对话框类添加WM_TIME消息。代码如下:
[html] view plaincopyprint?
void CMFCTimerDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
if (5 == m_nData1)
{
KillTimer(1) ;
break ;
}
SetDlgItemInt(IDC_EDIT1, ++m_nData1) ;
case 2:
if (10 == m_nData2)
{
KillTimer(2) ;
break ;
}
SetDlgItemInt(IDC_EDIT2, ++m_nData2) ;
default:
break ;
}
CDialog::OnTimer(nIDEvent);
}

Vs2012的MFC中编写SetTimer函数出错,求解如下图:


MFC程序的SetTimer,没必要使用回调函数,直接重载WM_TIMER在OnTimer中处理即可,第三参数设置为NULL。
而且,回调函数也不能使用标准类成员函数,因为类成员本身是不能stdcall静态调用的,于回调函数的要求不符。

settimer函数的使用例子


如果你说的是 OnStartTimer() 和OnStopTimer() 的话,可能是用户自己定义好的一个消息响应函数,比如加2个菜单分别为开始和停止。按照一般的消息响应方式添加即可。当然也可以添加成一般的成员函数,声明在头文件定义在cpp文件。
如果是 SetTimer和KillTimer这是库函数,无需单独声明。

VC6.0中在哪里写在编辑框中显示当前的系统时间CTime这类怎么处理需要加头文件吗


以mfc对话框为例
添加WM_TIMER消息、WM_CLOSE消息响应函数
OnInitDialog()中添加SetTimer(0, 1000, NULL);
OnClose()中添加KillTimer(0);
OnTimer() 中添加
CTime t = CTime::GetCurrentTime();
SetDlgItemText(IDC_EDIT1, t.Format(“%H:%M:%S“));
so easy

MFC中设置了settimer和ON_WM_TIMER了,但还是进不去ONTIMER函数


头文件 定义 afx_msg void OnTimer(UINT nIDEvent);
定义timer #define MyTimer 11111
CPP 的消息映射 ON_WM_TIMER() 要加上
CPP 文件中实现 OnTimer
void CXXX::OnTimer(UINT nIDEvent)
{
if( nIDEvent == MyTimer)
{
KillTimer(MyTimer);
}
CXX:OnTimer(nIDEvent);
}
SetTimer(BMyTimer,1000, NULL); //1秒后启动定时器

settimer头文件(vc6.0的settimer函数)

本文编辑:admin

更多文章:


u817中兴(中兴u817是虚拟键盘)

u817中兴(中兴u817是虚拟键盘)

本文目录中兴u817是虚拟键盘中兴u817怎么样我的手机是中兴u817,最近上网一会儿能上,一会儿又说此热点不能上网,请切换其他wifi,是什么原中兴 U817的硬件参数中兴 U817的基本参数中兴u817是虚拟键盘  是的,只要开机解锁屏

2024年6月8日 23:15

葫芦娃禁用软件app下载安装(怎么下载葫芦娃视频)

葫芦娃禁用软件app下载安装(怎么下载葫芦娃视频)

其实葫芦娃禁用软件app下载安装的问题并不复杂,但是又很多的朋友都不太了解怎么下载葫芦娃视频,因此呢,今天小编就来为大家分享葫芦娃禁用软件app下载安装的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录怎么下载葫芦

2024年7月31日 10:45

百度在线文言文翻译器(文言文现代文互翻译器)

百度在线文言文翻译器(文言文现代文互翻译器)

这篇文章给大家聊聊关于百度在线文言文翻译器,以及文言文现代文互翻译器对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录文言文现代文互翻译器在线古文言文翻译器好使的文言文翻译软件什么软件可以翻译文言文在线白话文言文翻译器白话文翻译

2024年6月29日 18:43

ce修改器中文版下载(CE修改器怎么解压成中文版步骤)

ce修改器中文版下载(CE修改器怎么解压成中文版步骤)

各位老铁们好,相信很多人对ce修改器中文版下载都不是特别的了解,因此呢,今天就来为大家分享下关于ce修改器中文版下载以及CE修改器怎么解压成中文版步骤的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录CE修改器怎么

2024年7月7日 21:40

国家正规的股票交易平台(炒股有什么推荐的平台)

国家正规的股票交易平台(炒股有什么推荐的平台)

“国家正规的股票交易平台”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看国家正规的股票交易平台(炒股有什么推荐的平台)!本文目录炒股有什么推荐的平台正规的股票平台有哪些(股票在哪个平台买比较好)股票交易平台哪个好谁知道啊正规

2024年6月25日 03:11

qq浏览器兼容模式怎么设置(qq浏览器怎么开启兼容模式)

qq浏览器兼容模式怎么设置(qq浏览器怎么开启兼容模式)

本篇文章给大家谈谈qq浏览器兼容模式怎么设置,以及qq浏览器怎么开启兼容模式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录qq浏览器怎么开启兼容模式手机qq浏览器怎么设置兼容模式qq浏览器的兼容模式怎么设置在哪手机qq浏览器

2024年6月8日 12:35

消火栓箱安装图集(薄型单栓带消防软管卷盘消火栓箱和15s202-15的安装图)

消火栓箱安装图集(薄型单栓带消防软管卷盘消火栓箱和15s202-15的安装图)

本文目录薄型单栓带消防软管卷盘消火栓箱和15s202-15的安装图室内消火栓安装图集04s202和15s202有什么区别薄型单栓带消防软管卷盘消火栓箱和15s202-15的安装图薄型单栓带消防软管卷盘消火栓箱安装图:《中华人民共和国国家标准

2024年5月14日 19:56

抢红包赚钱软件app(抢红包软件哪个好用)

抢红包赚钱软件app(抢红包软件哪个好用)

今天给各位分享抢红包软件哪个好用的知识,其中也会对抢红包软件哪个好用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录抢红包软件哪个好用现在用的最好用的微信抢红包软件有哪些多多红包群怎么登录可以赚零花钱的小游戏抢

2024年6月9日 12:34

怎样用易语言编写12306购票软件?新版 12306怎么自动抢票

怎样用易语言编写12306购票软件?新版 12306怎么自动抢票

本文目录怎样用易语言编写12306购票软件新版 12306怎么自动抢票那里有卖收费的毫秒抢票软件春运12306出大招,能比得过抢票软件和黄牛吗易通行和北京一卡通有什么区别怎样用易语言编写12306购票软件POST是基础,对http协议需要有

2024年5月19日 13:33

u盘文件夹exe病毒专杀工具(u盘病毒专杀工具usbcleaner6.0怎么去掉U盘写保护)

u盘文件夹exe病毒专杀工具(u盘病毒专杀工具usbcleaner6.0怎么去掉U盘写保护)

本篇文章给大家谈谈u盘文件夹exe病毒专杀工具,以及u盘病毒专杀工具usbcleaner6.0怎么去掉U盘写保护对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了

2024年7月21日 09:40

国泰君安软件下载官方网站(国泰君安官方网站免费下载.)

国泰君安软件下载官方网站(国泰君安官方网站免费下载.)

本篇文章给大家谈谈国泰君安软件下载官方网站,以及国泰君安官方网站免费下载.对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录国泰君安官方网站免费下载.香港国泰君安证券下载地址是什么国泰君安官方网站下载国泰君安下载国泰君安大智慧软

2024年7月24日 15:48

杀毒软件nod32(ESET NOD32防病毒软件好还是360杀毒软件好,高手请解)

杀毒软件nod32(ESET NOD32防病毒软件好还是360杀毒软件好,高手请解)

这篇文章给大家聊聊关于杀毒软件nod32,以及ESET NOD32防病毒软件好还是360杀毒软件好,高手请解对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录ESET NOD32防病毒软件好还是360杀毒软件好,高手请解杀毒软件

2024年8月29日 02:10

过山车年龄限制多少岁?中国最高的过山车在哪

过山车年龄限制多少岁?中国最高的过山车在哪

本文目录过山车年龄限制多少岁中国最高的过山车在哪南昌融创云霄飞车最高最快吗过山车的特点坐云霄飞车有哪些危害和注意事项云霄飞车-王大文 歌词过山车英语玩过山车多少钱一次啊过山车年龄限制多少岁过山车年龄限制是60岁以上的长者不能乘坐。过山车(R

2024年7月4日 22:27

nero8刻录软件怎么用(如何使用Nero刻录软件.)

nero8刻录软件怎么用(如何使用Nero刻录软件.)

大家好,nero8刻录软件怎么用相信很多的网友都不是很明白,包括如何使用Nero刻录软件.也是一样,不过没有关系,接下来就来为大家分享关于nero8刻录软件怎么用和如何使用Nero刻录软件.的一些知识点,大家可以关注收藏,免得下次来找不到哦

2024年5月21日 02:08

星战帝国的玩家FAQ?为什么星战里帝国会造4条腿的AT-AT和两条腿的步行机不但移动速度慢,而且被打断一条腿不就直接

星战帝国的玩家FAQ?为什么星战里帝国会造4条腿的AT-AT和两条腿的步行机不但移动速度慢,而且被打断一条腿不就直接

本文目录星战帝国的玩家FAQ为什么星战里帝国会造4条腿的AT-AT和两条腿的步行机不但移动速度慢,而且被打断一条腿不就直接星战旧正史有哪些帝国军官《星战5:帝国反击战》中卢克在尤达的星球杀死他父亲是怎么回事星战帝国的玩家FAQQ:我怎么样才

2024年6月30日 04:57

颜色的战争读后感?颜色战争是什么意思

颜色的战争读后感?颜色战争是什么意思

本文目录颜色的战争读后感颜色战争是什么意思什么颜色代表战争胜利颜色的战争俄国五日战争中,北约没有出兵帮助格鲁吉亚这究竟是什么原因《书的故事》中的秘鲁牧人用什么颜色表示战争中班美文美画《颜色的战争》教案颜色的战争读后感红、蓝、黄、橙、绿、紫、

2024年3月25日 02:50

恒泰证券交易软件下载(恒泰证券开户后怎么登陆交易 如何登陆恒泰证券)

恒泰证券交易软件下载(恒泰证券开户后怎么登陆交易 如何登陆恒泰证券)

“恒泰证券交易软件下载”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看恒泰证券交易软件下载(恒泰证券开户后怎么登陆交易 如何登陆恒泰证券)!本文目录恒泰证券开户后怎么登陆交易 如何登陆恒泰证券请问恒泰证券怎么申请股票开户恒泰

2024年8月6日 23:26

怎么下载腾讯课堂里的公开课?网易公开课批量下载方法

怎么下载腾讯课堂里的公开课?网易公开课批量下载方法

本文目录怎么下载腾讯课堂里的公开课网易公开课批量下载方法手机上的网易公开课的付费课程怎么下载怎么下载腾讯课堂里的公开课1、打开腾讯课堂APP。2、根据选项卡选择自己喜欢的领域。3、选择自己喜欢并要下载的课程。4、点击进入喜欢的课程,右边有一

2023年12月22日 01:40

qq克隆音乐免费下载(qq克隆会把音乐导入吗)

qq克隆音乐免费下载(qq克隆会把音乐导入吗)

大家好,今天小编来为大家解答以下的问题,关于qq克隆音乐免费下载,qq克隆会把音乐导入吗这个很多人还不知道,现在让我们一起来看看吧!本文目录qq克隆会把音乐导入吗怎样克隆qq背景音乐空间背景音乐怎么弄啊 在那里可以下载qq空间音乐克隆器QQ

2024年5月18日 19:14

上海曼朗市场营销策划有限公司怎么样?曼朗优化能力怎么样,有合作过的朋友来说说吗

上海曼朗市场营销策划有限公司怎么样?曼朗优化能力怎么样,有合作过的朋友来说说吗

本文目录上海曼朗市场营销策划有限公司怎么样曼朗优化能力怎么样,有合作过的朋友来说说吗曼朗和耐特康赛哪家好曼朗和超快排哪个好曼朗策划怎么样,哪个产品做得好呢曼朗和有客来哪个好,有人接触过吗曼朗好不好上海曼朗市场营销策划有限公司有人了解吗,做得

2024年6月19日 13:48

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索