Итак, мой учитель дал нам кусок кода для двойной буферизации.hdc undefined [gdi +, стандартное приложение mfc]
Он сказал: «Здесь, используйте этот код, поэтому вам не нужно часами сидеть, узнавая, как» За исключением того, что его код не работает.
Его первоначальное использование hdc не определено. Я попытался поместить его в список параметров, но это не выход.
Это код, он дал нам:
// Create a backbufer bmp bufer to draw to in memory.
RECT rcClient;
::GetClientRect(hwnd, &rcClient);
int left = rcClient.left;
int top = rcClient.top;
int width = rcClient.right - rcClient.left;
int height = rcClient.bottom - rcClient.top;
HDC hdcMem = ::CreateCompatibleDC(hdc);
const int nMemDC = ::SaveDC(hdcMem);
HBITMAP hBitmap = ::CreateCompatibleBitmap(hdc, width, height);
::SelectObject(hdcMem, hBitmap);
Graphics graphics(hdcMem);
SolidBrush back(Color(255,255,255));
graphics.FillRectangle(&back, left, top, width, height);
// Draw to backbufer bitmap here.
// End draw to backbufer bitmap bufer.
// Swap bufers ie. push memory backbufer to the screen frontbufer
RECT rcClip;
::GetClipBox(hdc, &rcClip);
left = rcClip.left;
top = rcClip.top;
width = rcClip.right - rcClip.left;
height = rcClip.bottom - rcClip.top;
::BitBlt(hdc, left, top, width, height, hdcMem, left, top, SRCCOPY);
::RestoreDC(hdcMem, nMemDC);
::DeleteObject(hBitmap);
Прямо здесь, где я бегу на ошибки: HDC hdcMem = ::CreateCompatibleDC(hdc);
я попытался объявляя HDC как так
HDC hdc = (HDC)BeginPaint((LPPAINTSTRUCT)AfxGetApp()->m_pMainWnd->GetSafeHwnd());
Но это не компиляции. Что мне делать с этим hdc?
Код явно ожидает, что 'hdc' уже будет доступен (предположительно это DC окна, которое вы пытаетесь нарисовать). Должен быть какой-то другой текст, объясняющий это. Если нет, вы можете попробовать функцию [GetDC] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd144871%28v=vs.85%29.aspx). –
Не используйте 'BeginPaint', если вы не находитесь в обработчике сообщения' WM_PAINT'. –