0
我今天遇到的一個非常奇怪的問題。在MFC項目的VC6下運行代碼,它是黑屏,它完美的工作,並顯示桌面圖片,如果我拿出評論。然而,這些代碼在無限循環中執行,所以我嘗試減少內存複製和內存花費,如BitBlt
和CreateCompatibleBitmap
等。我不明白我的程序如何與這些註釋代碼相關。任何人都知道是什麼原因導致問題,爲什關於GetDIBits和設備上下文的奇怪錯誤
HDC hdcDesktop = ::CreateDC("DISPLAY", NULL, NULL, NULL);
RECT desktopRect;
::GetWindowRect(::GetDesktopWindow(), &desktopRect);
int desktopWidth = desktopRect.right - desktopRect.left;
int desktopHeight = desktopRect.bottom - desktopRect.top;
HBITMAP hBitmap = CreateCompatibleBitmap(hdcDesktop, desktopWidth, desktopHeight);
/*
HDC hdcMemory = CreateCompatibleDC(hdcDesktop);
SelectObject(hdcMemory, hBitmap);
BitBlt(hdcMemory, 0, 0, desktopWidth, desktopHeight, hdcDesktop, 0, 0, SRCCOPY);
*/
BITMAPINFO bitmapInfo = {0};
bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
GetDIBits(hdcDesktop, hBitmap, 0, 0, NULL, &bitmapInfo, DIB_RGB_COLORS);
BYTE *pData = new BYTE[bitmapInfo.bmiHeader.biSizeImage];
memset(pData, 0, bitmapInfo.bmiHeader.biSizeImage);
GetDIBits(hdcDesktop, hBitmap, 0, bitmapInfo.bmiHeader.biHeight, pData, &bitmapInfo, DIB_RGB_COLORS);
CRect destRect;
GetClientRect(&destRect);
StretchDIBits(::GetDC(m_hWnd), 0, 0, destRect.Width(), destRect.Height(), 0, 0, bitmapInfo.bmiHeader.biWidth, bitmapInfo.bmiHeader.biHeight,
pData, &bitmapInfo, DIB_RGB_COLORS, SRCCOPY);
堆棧溢出不是尋求幫助的地方,可以解釋**你的**代碼。你應該知道,你的代碼是幹什麼的。嚴重的是,VC6?如果你關心性能,升級到在這個千年中寫的東西。 – IInspectable
我很多的項目仍然在VC6中運行,並且它們穩定而且很好...我完全同意,它是一箇舊的編譯器,但是可靠...並且來自VC6的代碼應該在VC6中運行良好。 – flaviu2
@ flaviu2:VC6不支持任何**當前支持的Windows版本(即Windows Vista)。使用不支持你的目標的工具沒有什麼可靠的。另外,實際上仍然理解VC6的C++版本的開發人員羣體正在縮小。 – IInspectable