Я использую GDI + для отображения окна входа в систему.Все это прекрасно работает на Windows 7, но на Windows XP (SP3 со всеми обновлениями) нет абсолютно никакого вывода.
Код в WM_PAINT
PAINTSTRUCT ps;
HDC hdc = BeginPaint( hwnd, &ps );
Graphics *graphics= new Graphics( hdc );
if ( graphics->Clear( BACKGROUND_COLOR ) != Ok )
{
LOGGER << "LoginWindow::Error clearing surface" << endl;
goto clean;
}
if ( graphics->DrawImage( dialogHeader, 0, 0, dialogHeaderSize.cx, dialogHeaderSize.cy ) != Ok )
{
LOGGER << "LoginWindow::Error drawing image" << endl;
goto clean;
}
if ( graphics->DrawRectangle( dialogBorderPen, 0, 0, LOGIN_WINDOW_WIDTH - 1, LOGIN_WINDOW_HEIGHT - 1 ) != Ok )
{
LOGGER << "LoginWindow::Error drawing rectangle" << endl;
goto clean;
}
clean:
delete graphics;
EndPaint( hwnd, &ps );
dialogHeader - это изображение .png, загруженное с помощью следующего кода:
dialogHeader = Bitmap::FromFile( imagePath );
GDI + инициализируется так:
GdiplusStartupInput gdiplusStartupInput;
Status gdiplusStatus;
ULONG_PTR gdiplusToken;
gdiplusStatus = GdiplusStartup( &gdiplusToken, &gdiplusStartupInput, NULL );
if ( gdiplusStatus != Ok )
{
LOGGER << "Main::Failed to initialize GDI+. ErrorCode=" << gdiplusStatus << endl;
return 1;
}
Некоторые известные факты:
- Код рисования всегда выполняется успешно (проверено с помощью отладчика - Visual Studio 2010)
- Изображение загружается без ошибок
- Это происходит, еслиwindows themes / aero выключен или включен
- Когда я перетаскиваю окно на Windows XP вне экрана, а затем обратно изображение отображается так:
http://imageshack.us/photo/my-images/851/winxp2.png/
Вывод на windows 7
http://imageshack.us/photo/my-images/824/win7p.png/
Вывод на windows XP
http://imageshack.us/photo/my-images/839/winxpu.png/
Надеюсь, кто-то может помочь.Спасибо.