//****自定义绘图函数********************************* // 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必须马上出去处理所开启的其他程序,因此可能会使得每秒画面的更新次数稍稍下降。 笔记八到这里就结束了。
|