我正在使用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