Итак, я знаю, что люди говорят о двойной буферизации на разных постах, но всякий раз, когда я пытаюсь это сделать, я получаю черный экран! это потому, что примеры, которые я вижу (мне нужны примеры), не программируются так, как я — как в разных библиотеках. Я пользуюсь только на данный момент. В любом случае, вот начальный фрагмент программы, который сильно мерцает:
void drawRed (HDC hdc)
{
HDC hdcMemory;
hdcMemory = CreateCompatibleDC(hdc);
while (1==1){
SelectObject(hdcMemory, redmask);
BitBlt(hdc, 132, 132, 128, 128, hdcMemory, 0, 0, SRCAND);
SelectObject(hdcMemory, red);
BitBlt(hdc, 132, 132, 128, 128, hdcMemory, 0, 0, SRCPAINT);
}
DeleteDC(hdcMemory);
}
и я посмотрел и попробовал это:
void drawRed (HDC hdc)
{
HDC hDC = GetDC(hnd);
HDC hdcMemory;
hdcMemory = CreateCompatibleDC(hdc);
HDC memDC = CreateCompatibleDC(hDC);
HBITMAP hMemBmp = CreateCompatibleBitmap(hDC,100,100);
HBITMAP hOldBmp = (HBITMAP)SelectObject(memDC,hMemBmp);
SelectObject(hdcMemory, hbmMem);
BitBlt(hDC, -100, -100, 128, 128, memDC, 0, 0, SRCAND);
SelectObject(hdcMemory, red);
BitBlt(hDC, -100, -100, 128, 128, memDC, 0, 0, SRCPAINT);
SelectObject(hdcMemory, red);
BitBlt(hDC, 132, 132, 128, 128, memDC, 0, 0, SRCCOPY);
DeleteDC(hdcMemory);
}
и это просто показывает черный ящик. Я не знаю, как я должен это сделать, так что вы можете изменить исходный блок кода для двойной буферизации? Спасибо!
Я использую dev-c ++ ide.
Для MFC вы можете использовать класс CMemDC Кит Рул. Есть хорошая статья об этом классе с примером — http://www.codeproject.com/Articles/33/Flicker-Free-Drawing-In-MFC
Подобный класс включен в MFC Feature Pack — http://msdn.microsoft.com/en-us/library/cc308997.aspx
Других решений пока нет …