//Создаешь виртуальный контекст сначала:
HBITMAP vBmp;
HDC vDC;
vDC = CreateCompatibleDC(GetDC(hWnd)); //hWnd - хендл твоего окна
vBmp = CreateCompatibleBitmap(vDC, width, height); //width, height - нужные размеры (максимум для окна)
// когда надо что то нарисовать рисуешь прям в vDC, а не в сам графический контекст окна.
//При обновлении делаешь например так:
BitBlt(dc, 0, 0, width, height, vDC, 0, 0, SRCCOPY);
//dc - контекст окна в который рисуешь
Обновление окна при рисовании
Проблема: вывожу в окно динамическую диаграму, которая обновляется таймером. Рисую примитивами GDI. При обновлении изображение "дрожит". Существут ли более еффективные способы вывода подобной примитивной графики, не используя директиксы и пр.
-Не обновляй постоянно когда не надо.
-Храни копию изображения в виртуальном контексте, и рисуй только туда.
При обновление делай только копирование (BitBlt) уже в окно из той областии.
Обрабатывай событие WM_PAINT, посылаемое форме вручную.
-Храни копию изображения в виртуальном контексте, и рисуй только туда.
При обновление делай только копирование (BitBlt) уже в окно из той областии.[/QUOTE]
Спасибо за подсказку, но какого типа должен быть контекст источника при вызове BitBlt и как в этот контекст рисовать или хранить там изображение рабочей области?
Если юзаешь какие то классовые библиотеки типа MFC, ATL там есть классовая оболочка над ним CDC.
Собсвенно расскажи, чем пользуешся и как рисуешь.
А так вот тебе примерчик на голом API который в случае чего легко переделать с поддержкой какой либо библиотеки или вобще не переделывать )
Код:
Спасибо! Должен сказать, что мне немного стыдно - мог бы и сам догадатся. Время сэкономил :) - но мозги жиром заплывают :(