我正在使用GDI +呈现登录窗口。它在Windows 7上运行良好,但在Windows XP(具有所有更新的SP3)上的 完全没有输出。在Windows XP上的GDI +问题
代码在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是用下面的代码loded为.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主题/航空被关闭或
- 当我在Windows XP上拖动窗口出画面,然后返回的图像显示这样的:
http://imageshack.us/photo/my-images/851/winxp2.png/
上窗口输出7
http://imageshack.us/photo/my-images/824/win7p.png/
输出在Windows XP
http://imageshack.us/photo/my-images/839/winxpu.png/
我希望有人可以提供帮助。谢谢。
您可能会通过关闭Aero来重现Win7上的问题。从你的代码片段中看不出它的原因。看不到hdc从哪里来。 – 2012-03-03 20:55:36
不要紧,我是否有主题/航空开启或关闭,结果总是相同:(噢和HDC从HDC =调用BeginPaint(HWND来了,&ps); – scetix 2012-03-03 21:20:28
是GDI +正确初始化?(可Win7的做到这一点本身在程序加载...):?? – 2012-03-03 21:45:15