我的一个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;
}请见过这样情况的人说说你们的经验,帮助我一下
我会非常感谢的。
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;
}请见过这样情况的人说说你们的经验,帮助我一下
我会非常感谢的。
对不起 更正:我的一个窗口程序关联到了 d3dDevice
可以这样:在清理完D3D环境之后立即用SHELL相关函数刷新桌面。
谢谢,zhouzhipen那么请问 zhouzhipen,在什么情况下 会产生这一个bug? 是不是用到了directx ?是不是用到WS_POPUP?
我也会自己试试 ,但不知道你是否知道?
稍后给分