winapi — пример двойной буферизации C ++ win32 api помогите пожалуйста

Итак, я знаю, что люди говорят о двойной буферизации на разных постах, но всякий раз, когда я пытаюсь это сделать, я получаю черный экран! это потому, что примеры, которые я вижу (мне нужны примеры), не программируются так, как я — как в разных библиотеках. Я пользуюсь только на данный момент. В любом случае, вот начальный фрагмент программы, который сильно мерцает:

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.

1

Решение

Для 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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector