首页 技术 正文
技术 2022年11月20日
0 收藏 340 点赞 2,526 浏览 1783 个字

本系列文章由@二货梦想家张程所写,转载请注明出处。

本文章链接http://blog.csdn.net/terence1212/article/details/44195831

作者:ZeeCoder 微博链接:http://weibo.com/zc463717263

我的邮箱:https://www.shuzhiduo.com/A/xl56bmoo5r/michealfloyd@126.com欢迎大家发邮件来和我交流编程心得

you are what you read!与大家共勉!

定时器的使用

(1)定时器事件

所谓定时器事件,顾名思义,即定时触发执行某个事件。在游戏编程中,我们经常借助它来实现简易动画。

在Windows API中提供了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事件的窗口类;nIDEvent是定时器代号,即身份标志,这样在OnTimer()事件中,才能根据不同的定时器,来做不同的事件响应;uElapse是时间间隔;lpTimerFunc为相应的处理函数,如果不用响应函数处理WM_TIMER消息,则此参数应设为NULL。

在建立的定时器之后,如果程序要停用该定时器,这时候Window Api提供了killTimer函数来删除定时器。其原型为

BOOL KillTimer(    HWND hWnd,      // handle of window that installed timer    UINT uIDEvent     // timer identifier);

(2)定时器使用示范

本笔记中要实现人物跑动的如下动画:

下面是代码部分:

1、全局变量声明

// Global Variables:HINSTANCE hInst;// current instanceHBITMAP Walker[16] ;//声明人物跑动数组来存储各章人物位图HDC mdc ,hdc ;//int num;//用来记录当前显示的图号

2、 初始化函数

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){   HWND hWnd;   TCHAR filename[20] ;   memset(filename , 0 ,sizeof(TCHAR)*20);   int i ;   hInst = hInstance; // Store instance handle in our global variable   hWnd = CreateWindow(szWindowClass, _T("人物跑动"), WS_OVERLAPPEDWINDOW,      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);   if (!hWnd)   {      return FALSE;   }   MoveWindow(hWnd , 10 ,10 ,600 ,450 ,true);   ShowWindow(hWnd, nCmdShow);   UpdateWindow(hWnd);   hdc = GetDC(hWnd);   mdc = CreateCompatibleDC(hdc);   //载入各个人物位图   for ( i = 0 ; i <= 15 ;i++)   {       _stprintf_s(filename , TEXT("%d.bmp") , i);       Walker[i] = (HBITMAP)LoadImage(NULL , filename , IMAGE_BITMAP , 121 ,129, LR_LOADFROMFILE);   }   num = 0 ;   SetTimer(hWnd , 1, 100 , NULL);   MyPaint(hdc) ;   return TRUE;}

3、自定义绘图程序

void MyPaint(HDC hdc){    if (num > 15)    {        num = 0 ;    }    SelectObject(mdc , Walker[num]);    BitBlt(hdc , 200 , 150 ,600 ,450 , mdc ,0 ,0 ,SRCCOPY);    num ++;}

4、运行上述代码之后就能看到人物跑动的动画了。

笔记二就到这里结束了。

end!

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,903
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,429
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,245
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,057
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,689
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,726