//****自定义绘图函数*********************************
// 1.计算与显示每秒画面更新次数
// 2.按照图号顺序进行窗口贴图
void MyPaint(HDC hdc)
{
char str[40] = “”;
if(num == 7)
num = 0;
frame++; //画面更新次数加1
if(tNow - tCheck >= 1000) //判断此次绘图时间由前一秒算起是否已经达到1秒钟的时间间隔。若是,则将目前的‘frame’值赋给“fps”,表示这一秒内所更新的画面次数,然后将“frame”值回0,并重设下次计算每秒画面数的起始时间“iCheck”.
{
fps = frame;
frame = 0;
tCheck = tNow;
}
SelectObject(mdc,man[num]); //选用要更新的图案到mdc中,再输出显示每秒画面更新次数的字符串到mdc上,最后将mdc的内容贴到窗口中。
sprintf(str,“每秒显示 %d个画面”,fps);
TextOut(mdc,0,0,str,strlen(str));
BitBlt(hdc,0,0,600,450,mdc,0,0,SRCCOPY);
tPre = GetTickCount(); //记录此次绘图时间,供下次游戏循环中判断是否已经达到画面更新操作设定的时间间隔。
num++;
}
//******消息处理函数*********************************
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
int i;
switch (message)
{
case WM_DESTROY: //窗口结束消息
DeleteDC(mdc);
for(i=0;i<7;i++)
DeleteObject(man[i]);
ReleaseDC(hWnd,hdc);
PostQuitMessage(0);
break;
default: //其他消息
return DefWindowProc(hWnd,
message, wParam, lParam);
}
return 0;
}
程序的运行结果如下图:

当然想要得到上述动画,我们需要把几幅位图文件放到工程文件夹下。
这个范例中我们设定的画面更新时间间隔为0.1秒,所以每秒钟最多会更新10次画面。不过如果在运行这个例子的时候同时也运行其他的程序,那么CPU必须马上出去处理所开启的其他程序,因此可能会使得每秒画面的更新次数稍稍下降。
笔记八到这里就结束了。