TheReclif Temat założony przez niniejszego użytkownika |
[C++] [WinApi] Bitmapa się nie zmienia (nie wiem, jak opisać temat) » 2016-03-14 20:35:22 Witam! Tworzę ostatnio api/silnik/bibliotekę, w której ma znajdować się coś podobnego do launchera, ale mocno uproszczone: launcher wyświetla logo silnika, po chwili logo gry, a potem elegancko wczytuje ustawienia z pliku i tworzy główne okno gry. Logo silnika wyświetla się, ale w momencie, gdy ma się zmienić wyświetlana bitmapa, to to się nie dzieje. Kod: Rysowanie bitmap: case WM_CREATE: { if( winType == WindowType::LAUNCHER_WINDOW ) { WNDCLASSEX wndclass; wchar_t wndClassName[ 251 ] = L""; GetClassName( getHWND(), wndClassName, 250 ); GetClassInfoEx( GetModuleHandle( NULL ), wndClassName, & wndclass ); defaultBrush = wndclass.hbrBackground; tempBitmap1 =( HBITMAP ) LoadImageW( NULL, L"gamedata\\GameLauncherBitmap.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); tempBitmap2 =( HBITMAP ) LoadImageW( NULL, L"enginedata\\GlowEngineLauncherBitmap.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); if( tempBitmap1 == NULL ) { wostringstream woss; DWORD error = GetLastError(); woss << L"Failed to load tempBitmap1! Code error: " << error; GLOWE::ErrorMgr::getStdErrorMgr().throwError( woss.str(), L"[MODULE] - ParseMessage (WM_PAINT)" ); break; } if( tempBitmap2 == NULL ) { wostringstream woss; DWORD error = GetLastError(); woss << L"Failed to load tempBitmap2! Code error: " << error; GLOWE::ErrorMgr::getStdErrorMgr().throwError( woss.str(), L"[MODULE] - ParseMessage (WM_PAINT)" ); break; } } break; } case WM_PAINT: { PAINTSTRUCT paintStruct; HDC wndHdc = BeginPaint( windowHandle, & paintStruct ); if( winType == WindowType::LAUNCHER_WINDOW ) { HDC launcherSecondDC = CreateCompatibleDC( wndHdc ); HGDIOBJ _localtemp_oldbitmap_launcherSecondDC; RECT wndRect; GetClientRect( getHWND(), & wndRect ); if(( bool ) __GLOWE_WINDOW_ADDITIONAL_DATA == true ) { _localtemp_oldbitmap_launcherSecondDC = SelectObject( launcherSecondDC, tempBitmap1 ); } else { _localtemp_oldbitmap_launcherSecondDC = SelectObject( launcherSecondDC, tempBitmap2 ); } FillRect( wndHdc, & wndRect, defaultBrush ); BitBlt( wndHdc, 0, 0, 300, 100, launcherSecondDC, 0, 0, SRCCOPY ); SelectObject( launcherSecondDC, _localtemp_oldbitmap_launcherSecondDC ); DeleteDC( launcherSecondDC ); } EndPaint( windowHandle, & paintStruct ); break; }
Zmiana bitmap: MSG msg; Clock bitmapChangeClock; bool done = false;
launcherWindow.setGloweAdditionalData(( LONG_PTR )( false ) );
SendMessage( launcherWindow.window.getHWND(), WM_PAINT, NULL, NULL );
while( !done ) { while( PeekMessage( & msg, launcherWindow.window.getHWND(), 0, 0, PM_REMOVE ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } if( bitmapChangeClock.getElapsedTime().asMiliseconds() >= 2350 ) { done = true; GLOWE::LogMgr::getStdLogMgr() << L"[DEBUG] Elapsed 2,350 secs passed!"; } }
done = false;
launcherWindow.setGloweAdditionalData(( LONG_PTR )( true ) );
bitmapChangeClock.reset();
SendMessage( launcherWindow.window.getHWND(), WM_PAINT, NULL, NULL );
while( !done ) { while( PeekMessage( & msg, launcherWindow.window.getHWND(), 0, 0, PM_REMOVE ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } if( bitmapChangeClock.getElapsedTime().asMiliseconds() >= 3000 ) { done = true; GLOWE::LogMgr::getStdLogMgr() << L"[DEBUG] Elapsed 3 secs passed!"; } }
Czemu to logo się nie zmienia (czyli czemu nie jest rysowana druga bitmapa)? |