我的一个c窗口程序关联到了 d3dDevice 
SwapEffect 使用到了 D3DSWAPEFFECT_FLIP
并且创建时 没有选择 标题栏(应该说什么都没有吧。。)在win xp 上,程序退出时出现了 ‘污染’桌面的情况,需要刷新才能消除.
但是在win7上有没有出现这种现象(我想是不是D3DSWAPEFFECT_FLIP导致的,因为dx sdk 2010 上有一句话:“D3DSWAPEFFECT_OVERLAY is only available in Direct3D9Ex running on Windows 7 (or more current operating system”))以下是窗口建立和退出的过程:INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
{
     // Register the window class
    WNDCLASSEX wc =
    {
        sizeof( WNDCLASSEX ), CS_DBLCLKS | CS_OWNDC |CS_HREDRAW | CS_VREDRAW, MsgProc, 0L, 0L,
        GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
        L"D3D app", NULL
    };
    RegisterClassEx( &wc );    // Create the application's window
    hWnd = CreateWindow( L"D3D app", L"D3D app",
                              WS_POPUP, 100, 100, 300, 300,
                              NULL, NULL, wc.hInstance, NULL );    // Initialize Direct3D
    if(! SUCCEEDED( InitD3D( hWnd ) ) )
    {
return 1;
}
    //....  (d3d的一些准备工作)    // Show the window
    ShowWindow( hWnd, SW_SHOWDEFAULT );
    UpdateWindow( hWnd );    // Enter the message loop
    MSG msg;
    ZeroMemory( &msg, sizeof( msg ) );
int lo_exit_process = 0;
    while( msg.message != WM_QUIT )
    {
Render();//d3d 的g_pd3dDevice->Present( );
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
        {
  TranslateMessage( &msg );
  DispatchMessage( &msg );

} if(KEYDOWN(VK_ESCAPE))
{
PostQuitMessage( 0 );

}

       Sleep(35);         
     }

Cleanup();//d3d    UnregisterClass( L"D3D app", wc.hInstance );

    return 0;
}请见过这样情况的人说说你们的经验,帮助我一下
我会非常感谢的。

解决方案 »

  1.   


    对不起 更正:我的一个窗口程序关联到了 d3dDevice 
      

  2.   

    系统的一个BUG,没办法。
    可以这样:在清理完D3D环境之后立即用SHELL相关函数刷新桌面。
      

  3.   


     谢谢,zhouzhipen那么请问 zhouzhipen,在什么情况下 会产生这一个bug? 是不是用到了directx ?是不是用到WS_POPUP?
    我也会自己试试 ,但不知道你是否知道?
    稍后给分