Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > GDI+ совместно с GDI и двойной буферизацией


Автор: mazzym 13.10.2011, 15:35
Пишу графическое приложение, в котором много чего рисуется. Есть сторонний код, который хочу подключить к программе (рисует с помощью GDI). Мой рендер использует GDI+ и двойную буферизацию. Пытаюсь  получить CDC так
Код

Gdiplus::Graphics g(this->m_hWnd, true);
CDC dc = g.GetHDC();


для того, чтобы передавать dc методам стороннего класса. Но и тут мне нужна двойная буферизация, так как там реализована активная перерисовка и появляется эффект мерцания.
Можно ли это все подружить вместе?

Вот так выглядит код при использовании CDC
Код

CBitmap bitmap;
CDC sourceDC;
CPaintDC targetDC(this->m_hWnd);
sourceDC.CreateCompatibleDC(targetDC.m_hDC);
bitmap.CreateCompatibleBitmap(targetDC, rectClient.Width()+1000, rectClient.Height()+1000);    
sourceDC.SelectBitmap(bitmap.m_hBitmap);

Draw(sourceDC); // Тут рисуем

targetDC.BitBlt(rectClient.left,rectClient.top,rectClient.Width(),rectClient.Height(),sourceDC.m_hDC,0,0,SRCCOPY);


Вот так выглядит код при использовании Gdiplus::Graphics
Код

Gdiplus::Graphics g(this->m_hWnd, true);
Gdiplus::Bitmap backBuffer(rectClient.right, rectClient.bottom, &g);
Gdiplus::Graphics gtemp(&backBuffer);

Draw(gtemp); // Тут рисуем

g.DrawImage(&backBuffer, 0, 0, 0, 0, rectClient.right, rectClient.bottom, Gdiplus::UnitPixel);

Автор: Earnest 13.10.2011, 18:43
Цитата(mazzym @  13.10.2011,  16:35 Найти цитируемый пост)
Можно ли это все подружить вместе?

Непонятно, в чем проблема.
Передавай во все ф-и прорисовки контекст буфера, а не экрана.

Автор: Dem_max 14.10.2011, 18:35
GDI+ не решает за тебя проблемы двойной буфферизации

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)