我正在使用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;
}
一些已知的事实:
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/
我希望有人可以提供帮助。感谢。
答案 0 :(得分:3)
原来它是WS_EX_COMPOSITED样式和GDI +自定义绘画的组合。如果我启用此标志,则最初在Windows XP上不会显示任何内容。只有在调整大小后,事情才会开始出现。
经过一些研究,我发现它可能是一个错误。但是有一个解决方法:现在,在调用时使用此“内存”HDC:
Graphics graphics (m_hDC);
当GDI +完成绘制到内存HDC时,然后调用BitBlt在pDC上绘制图像。