그래서 선생님이 더블 버퍼링에 사용할 코드 묶음을 주셨습니다.hdc가 정의되지 않았습니다. [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)BeginPaint((LPPAINTSTRUCT)AfxGetApp()->m_pMainWnd->GetSafeHwnd());
같은 HDC를 선언 시도하지만하지 않습니다 엮다. 이 HDC로 무엇을합니까?
이 코드는'hdc'가 이미 사용 가능할 것으로 기대하고 있습니다 (아마도 여러분이 그리려는 윈도우의 DC입니다). 이것을 설명하는 다른 텍스트가 있어야합니다. 그렇지 않다면 [GetDC] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd144871%28v=vs.85%29.aspx) 함수를 사용해보십시오. –
'WM_PAINT' 메시지의 핸들러에 있지 않으면'BeginPaint'를 사용하지 마십시오. –