当你创建好应用程序窗口并且初始化过Direct3D对象之后,你就完了渲染场景的准备工作。在大多数情况下,Windows应用程序在消息循环中检测系统的各种消息,并且在队列中没有消息需要处理的时候,则会对帧(frames)进行渲染。抛开这些,CreateDevice示例工程等待消息队列中的WM_PAINT消息,一旦消息到来则通知应用程序需要对窗口的所以部分进行重绘操作。
// The message loop.
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
每循环一次,DispatchMessage就会调用一次负责处理队列中各种消息的MsgProc(窗口过程函数)。当WM_PAINT被处理时,应用程序调用Render这个自定义函数,用来重绘窗口。之后ValidateRect这个Win32函数被调用,使得这个客户区域变得有效。
消息处理函数的示例代码如下:
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
既然应用程序已经处理了系统消息,那么下一步就是渲染显示。详见第四步:渲染并显示一个场景。