windows编程学习笔记之定时器
来源:互联网 发布:秀恩爱 知乎 编辑:程序博客网 时间:2024/06/13 09:03
定时器的三种使用方法:
方法一:
这是最方便的一种方法,它让Windows把WM_TIMER消息发送到应用程序的正常窗口消息处理程序中,SetTimer呼叫如下所示:
SetTimer (hwnd, 1, uiMsecInterval, NULL) ;
第一个参数是其窗口消息处理程序将接收WM_TIMER消息的窗口句柄。第二个参数是定时器ID,它是一个非0数值,在整个例子中假定为1。第三个参数是一个32位无正负号整数,以毫秒为单位指定一个时间间隔,一个60,000的值将使Windows每分钟发送一次WM_TIMER消息。
您可以通过呼叫
KillTimer (hwnd, 1) ;
在任何时刻停止WM_TIMER消息(即使正在处理WM_TIMER消息)。此函数的第二个参数是SetTimer呼叫中所用的同一个定时器ID。在终止程序之前,您应该响应WM_DESTROY消息停止任何活动的定时器。
当您的窗口消息处理程序收到一个WM_TIMER消息时,wParam参数等于定时器的ID值(上述情形为1),lParam参数为0。如果需要设定多个定时器,那么对每个定时器都使用不同的定时器ID。wParam的值将随传递到窗口消息处理程序的WM_TIMER消息的不同而不同。为了使程序更具有可读性,您可以使用#define叙述定义不同的定时器ID:
#define TIMER_SEC 1 #define TIMER_MIN 2在窗口过程处理函数中增加:
caseWM_TIMER: switch (wParam) { case TIMER_SEC: //每秒一次的处理 break ; case TIMER_MIN: //每分钟一次的处理 break ; } return 0 ;进行处理。
方法二:
让Windows直接将定时器消息发送给您程序的另一个函数。
SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ;我们把以下的callback函数称为TimerProc(您能够选择与其它一些用语不会发生冲突的任何名称),它只处理WM_TIMER消息:
VOID CALLBACK TimerProc ( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) { 处理WM_TIMER消息 }TimerProc的参数hwnd是在呼叫SetTimer时指定的窗口句柄。Windows只把WM_TIMER消息送给TimerProc,因此消息参数总是等于WM_TIMER。
iTimerID值是定时器ID,dwTimer值是与从GetTickCount函数的传回值相容的值。这是自Windows启动后所经过的毫秒数。
方法三:
设定定时器的第三种方法类似于第二种方法,只是传递给SetTimer的hwnd参数被设定为NULL,并且第二个参数(通常为定时器ID)被忽略了,最后,此函数传回定时器ID:
iTimerID = SetTimer (NULL, 0, wMsecInterval, TimerProc) ;如果没有可用的定时器,那么从SetTimer传回的iTimerID值将为NULL。
KillTimer的第一个参数(通常是窗口句柄)也必须为NULL,定时器ID必须是SetTimer的传回值:
KillTimer (NULL, iTimerID) ;传递给TimerProc定时器函数的hwnd参数也必须是NULL。这种设定定时器的方法很少被使用。如果在您的程序在不同时刻有一系列的SetTimer呼叫,而又不希望追踪您已经
用过了那些定时器ID,那么使用此方法是很方便的。
该章节中出现的一些函数:
1.MessageBeep (-1) ;
播放声音,参数可以取下面一些值来播放不同的声音。返回值为BOOL类型,成功返回非零,失败返回0。
如果失败可以调用
DWORD GetLastError(VOID);函数来得到错误类型。
Value Sound -1 Standard beep using the computer speaker MB_ICONASTERISK SystemAsterisk MB_ICONEXCLAMATION SystemExclamation MB_ICONHAND SystemHand MB_ICONQUESTION SystemQuestion MB_OK SystemDefault2.BOOL InvalidateRect(HWND hWnd, // handle to window CONST RECT *lpRect, // rectangle coordinates BOOL bErase // erase state);
InvalidateRect (hwnd, NULL, FALSE) ;参数1指向需要更新窗口的句柄;参数2指向需要更新的区域,为NULL时说明整个区域都要更新;
参数3指示更新时背景是否擦除,TRUE时擦除,FALSE时不擦除。
3.BOOL GetClientRect(HWND hWnd, // handle to window LPRECT lpRect // client coordinates);
得到hWnd所指向的窗口的客户区并且放入到lprect中。
4.GetClientRect (hwnd, &rc)
5.FillRect (hdc, &rc, hBrush) ;
6.Polygon (hdc, ptSegment [iSeg], 6) ;
7. OffsetWindowOrgEx (hdc, -42, 0, NULL) ;8.GetLocalTime (&st) ;函数传回目前的当地(计算机设置的)时间
GetSystemTime(&st) ;函数传回目前的世界时间typedef struct _SYSTEMTIME{WORD wYear ;WORD wMonth ;WORD wDayOfWeek ;WORD wDay ;WORD wHour ;WORD wMinute ;WORD wSecond ;WORD wMilliseconds ;}SYSTEMTIME, * PSYSTEMTIME ;
9.GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 2) ;
int GetLocaleInfo(LCID Locale, // locale identifier LCTYPE LCType, // information type LPTSTR lpLCData, // information buffer int cchData // size of buffer);
根据参数2得到系统的或用户的指定信息,放在szBuffer空间中,如果最后的长度为0,返回值为得到的信息的长度。10. SetMapMode (hdc, MM_ISOTROPIC) ;11. SetWindowExtEx (hdc, 276, 72, NULL) ;12. SetViewportExtEx (hdc, cxClient, cyClient, NULL) ;
13. SetWindowOrgEx (hdc, 138, 36, NULL) ;14. SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
该章节程序调试中出现的错误:
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
解决办法:这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。
解决方法:
1.进入project->setting->c/c++, 在category(第一行)中选择preprocessor,在processor definitions中添加_WINDOWS, 删除_CONSOLE
2.进入project->setting->Link, 在Project options中将/subsystem:console.改为/subsystem:windows
3.保存设置,Rebuild All.
- windows编程学习笔记之定时器
- windows编程学习笔记(5)定时器的使用
- 雅阁学习笔记之windows编程
- Spring学习笔记之定时器
- RTT学习笔记之定时器
- COCOS学习笔记之定时器
- JavaScript学习笔记之定时器
- 初识windows编程之六关于定时器
- Windows内核编程基础篇之定时器
- 2013.8.15 学习笔记《windows核心编程》(十二) 鼠标消息与定时器消息
- Windows学习笔记15——定时器
- 游戏编程学习笔记01 -- 定时器操作
- windows编程学习笔记
- windows编程学习笔记
- 【Visual C++】游戏编程学习笔记之二:定时器的使用
- 《linux高性能服务器编程》学习笔记(三)之I/O复用,信号,定时器
- Symbian学习笔记15 之 CPeriodic定时器
- STM32F10x 学习笔记之基本定时器
- 新中国成立以后,称帝者一览
- 三角函数
- TCP/IP 的工作原理
- ASP.NET MVC Framework 学习总结
- Groovy闭包
- windows编程学习笔记之定时器
- 多线程编程——基础篇 (一)
- 原生态幽默!乡村广播里听来的强悍内容
- 多线程编程——基础篇 (二)
- 如何才算掌握Java
- C#数据库事务原理及实践(上)
- 中国十大最难辨认姓氏
- MVP Summit 2008 照片纪实(三)- 922公里,目标拉斯维加斯
- C#数据库事务原理及实践(下)