улучшить прорисовку
Добавлено: Чт ноя 13, 2003 2:56 pm
встала задача рисовать график на диалоге (здесь уже был вопрос) и более того динамически его обновлять. Скорость обновления - раз в секунду.
По совету из форума выбрал компонент ChartDirector. компонент неплохой, но один недостаток. Если надо мне прорисовать заново какую то часть графика, то приходится удалять весь график и строить заново. Из за этого график довольно сильно мерцает. Связался с разработчиками. Они подтвердили что так и надо. И что типа если надо обновлять что то быстро, то надо смотреть на компоненты которые работают с DirectX или подобными интерфейсами. В принципе они правы...
Я пытался схимичить что то наподобие двойного буфера с текущим графиком.
Текущий компонент использует какой нибудь подходящий контрол (говорим про MFC) для вывода графика... Допустим я использую CStatic с присвоенным свойством SS_BITMAP.
То есть я создаю график в памяти, перевожу его в битмап и просто натягиваю битмап на CStatic...
chart = sStaic->SetBitmap(chart)
if (0 != chart)
DeleteObject(chart);
и затем sStatic.ShowWindow (TRUE);
Попробовав улучшить и сделал следующее. Вместо одного статик контрола, положил на диалог два и один сделал инвизибл.
CStatic static1;
CStatic static2;
на ран тайме смотрю какой статик контрол невидим (то бишь готов принять новый график), создаю и натягиваю на него график, делаю его видимым, а первый (который был видим) делаю невидимым.
--------------------------
void Class :: BuildChart ()
{
if (static1.IsWindowVisible())
{
CreateChart (static2);
static2.ShowWindow(TRUE);
static1.ShowWindow (FALSE);
}
else
{
CreateChart (static1);
static1.ShowWindow(TRUE);
static2.ShowWindow (FALSE);
}
}
Таким образом производительность немного улучшилась, но все равно недостаточно. Если диалоговое окно не двигать с самого начала, то вроде работает неплохо. Если же его передвинуть куда то, то опять начинает мерцаение сильное.. не пойму из за чего.
Подскажите идеи как еще можно улучшить прорисовку?
Спасибо
По совету из форума выбрал компонент ChartDirector. компонент неплохой, но один недостаток. Если надо мне прорисовать заново какую то часть графика, то приходится удалять весь график и строить заново. Из за этого график довольно сильно мерцает. Связался с разработчиками. Они подтвердили что так и надо. И что типа если надо обновлять что то быстро, то надо смотреть на компоненты которые работают с DirectX или подобными интерфейсами. В принципе они правы...
Я пытался схимичить что то наподобие двойного буфера с текущим графиком.
Текущий компонент использует какой нибудь подходящий контрол (говорим про MFC) для вывода графика... Допустим я использую CStatic с присвоенным свойством SS_BITMAP.
То есть я создаю график в памяти, перевожу его в битмап и просто натягиваю битмап на CStatic...
chart = sStaic->SetBitmap(chart)
if (0 != chart)
DeleteObject(chart);
и затем sStatic.ShowWindow (TRUE);
Попробовав улучшить и сделал следующее. Вместо одного статик контрола, положил на диалог два и один сделал инвизибл.
CStatic static1;
CStatic static2;
на ран тайме смотрю какой статик контрол невидим (то бишь готов принять новый график), создаю и натягиваю на него график, делаю его видимым, а первый (который был видим) делаю невидимым.
--------------------------
void Class :: BuildChart ()
{
if (static1.IsWindowVisible())
{
CreateChart (static2);
static2.ShowWindow(TRUE);
static1.ShowWindow (FALSE);
}
else
{
CreateChart (static1);
static1.ShowWindow(TRUE);
static2.ShowWindow (FALSE);
}
}
Таким образом производительность немного улучшилась, но все равно недостаточно. Если диалоговое окно не двигать с самого начала, то вроде работает неплохо. Если же его передвинуть куда то, то опять начинает мерцаение сильное.. не пойму из за чего.
Подскажите идеи как еще можно улучшить прорисовку?
Спасибо