Динамическое добавление доч. и их перерисовка
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 13.08.02 08:46
Оценка:
Проблемка в следующем..
Добавляю дочерние окна на CListCtrl после чего надо реализовать их перерисовку VScroll
(list report с колонками) все бы ничего, да при перерисовке дочерних окон в новых позициях все тормозит безбожно, если перерисовывать UpdateRect происходит наслоение предыдущих не перерисовываемых окон,
может есть стандартный способ отрисовать все это при скроллировании..?
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re: Динамическое добавление доч. и их перерисовка
От: Andir Россия
Дата: 13.08.02 08:53
Оценка:
Здравствуйте ol-lv, Вы писали:

OL>Проблемка в следующем..

OL>Добавляю дочерние окна на CListCtrl после чего надо реализовать их перерисовку VScroll
OL>(list report с колонками) все бы ничего, да при перерисовке дочерних окон в новых позициях все тормозит безбожно, если перерисовывать UpdateRect происходит наслоение предыдущих не перерисовываемых окон,
OL>может есть стандартный способ отрисовать все это при скроллировании..?

Извиняюсь, что не по теме ... Хотя может могу и по теме, но что-то не внятно звучит вопрос, может пояснишь ...
Итак не по теме:
Пр(date<sleepDate)?(и)о)шло время спать

C Уважением Andir!
Re[2]: Динамическое добавление доч. и их перерисовка
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 13.08.02 09:23
Оценка:
Здравствуйте Andir, Вы писали:

A>Пр(date<sleepDate)?(и)о)шло время спать


не по теме bool date;

Я на CListCtrl закидываю динамически окна, ну там делаю SetParent и трпр, но при скроллировании надобно изменять позиции доч. окон. Если я перерисовываю их все полностью это все дело тормозит безбожно, если перерисовываю только допустим верх (с GetUpdateRect)
,то при быстром скроллировании происходит наслоение тех ок-н которым позицию я не поменял. В общем есть ли стандартный метод отрисовки дочерних окон при скроллировании Парента ?
Subclass SetOwner не помогло
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[3]: Динамическое добавление доч. и их перерисовка
От: Andir Россия
Дата: 13.08.02 10:12
Оценка:
Здравствуйте ol-lv, Вы писали:

OL>Здравствуйте Andir, Вы писали:


A>>Пр(date<sleepDate)?(и):(о)шло время спать


OL>не по теме bool date;

ну тады нуно.
(curDayTime<=sleepDayTime)?(daytime=true):(daytime=false);
Пр(daytime)?(и):(о)шло время спать

OL>Я на CListCtrl закидываю динамически окна, ну там делаю SetParent и трпр, но при скроллировании надобно изменять позиции доч. окон. Если я перерисовываю их все полностью это все дело тормозит безбожно, если перерисовываю только допустим верх (с GetUpdateRect)

OL>,то при быстром скроллировании происходит наслоение тех ок-н которым позицию я не поменял. В общем есть ли стандартный метод отрисовки дочерних окон при скроллировании Парента ?
OL> Subclass SetOwner не помогло
А-а дык, а что тебе мешает сохранить, что на них нарисовано и просто копировать ... а не перерисовывать, а в окошках сделать флажок на обновление, мол если нужно перерисовать, то скажите, и сказать окошкам чтобы сами себя перерисовывали тока когда нуно (флажок).
Когда-то что-то подобное делал просто с окошком и на OnSize перерисовывал ... сохранение помогало и тормозов не было.

C Уважением Andir!
Re[4]: Динамическое добавление доч. и их перерисовка
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 13.08.02 10:39
Оценка:
Здравствуйте Andir, Вы писали:

A>Здравствуйте ol-lv, Вы писали:


OL>>Здравствуйте Andir, Вы писали:


A>>>Пр(date<sleepDate)?(и)о)шло время спать


OL>>не по теме bool date;

A>ну тады нуно.
A>(curDayTime<=sleepDayTime)?(daytime=true)daytime=false);
..........................

bool date=GetLocalTime()==date_sleep_my;
HANDLE hThrd;
DWORD thID;
(date)?(SuspemdThread(hThrd),Sleep(TimeSleep),ResumeThread(hThrd))hThrd=CreateThread(0,NULL,(LPTHREAD_START_ROUTINE)Work,0,NULL,thID),MessageBox(0,"Ух","Я бодр",MB_OK));

....................
A>А-а дык, а что тебе мешает сохранить, что на них нарисовано и просто копировать ... а не перерисовывать, а в окошках сделать флажок на обновление, мол если нужно перерисовать, то скажите, и сказать окошкам чтобы сами себя перерисовывали тока когда нуно (флажок).
A>Когда-то что-то подобное делал просто с окошком и на OnSize перерисовывал ... сохранение помогало и тормозов не было.

A>C Уважением Andir!


Дык пробовал, с помощью BitBlt(....) сдвигать, а стандартный обр-ик ?... в общем возникали проблемки и упиралось в создание своего скроллинга.... !!!Я так подумал, может есть стандартные методы, которые говорят чилдренам о том, что мол парент скроллируется и чтоб они входили в общий dc парента и перерисовывались как положено!!!!!, если таких нет, дык придется либо по другому это все делать либо свой скроллинг создавать
чего ой как не хочется
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[5]: Динамическое добавление доч. и их перерисовка
От: Andir Россия
Дата: 13.08.02 23:30
Оценка:
Здравствуйте ol-lv, Вы писали:

[skip]
OL>..........................

OL>bool date=GetLocalTime()==date_sleep_my;

OL>HANDLE hThrd;
OL>DWORD thID;
OL>(date)?(SuspemdThread(hThrd),Sleep(TimeSleep),ResumeThread(hThrd)):(hThrd=CreateThread(0,NULL,(LPTHREAD_START_ROUTINE)Work,0,NULL,thID),MessageBox(0,"Ух","Я бодр",MB_OK));
:super:

[skip]

OL>Дык пробовал, с помощью BitBlt(....) сдвигать, а стандартный обр-ик ?... в общем возникали проблемки и упиралось в создание своего скроллинга.... !!!Я так подумал, может есть стандартные методы, которые говорят чилдренам о том, что мол парент скроллируется и чтоб они входили в общий dc парента и перерисовывались как положено!!!!!, если таких нет, дык придется либо по другому это все делать либо свой скроллинг создавать

OL> :( чего ой как не хочется
Да стандартный обработчик тоже самое бы и делал, если бы был ... по-моему тут никаких проблем не должно быть, всё просто до нельзя ...
берём твоё дочернее окно и говорим что сейчас будем двигать-> оно ся сохраняет и скрывает, затем меняем ему положение и говорим что двигать закончили -> оно в ответ себя показывает но не перерисовывает, а копирует сохранёное ранее. При картинках в половину экрана, этого не видно даже если очень захотеть на пне 300 ...
UpdateRect (InvalidateRect ?) здесь не выгоден, потому что проверяет нужно ли обновлять, а я так понял ты то уже знаешь, что не нужно, а нужно просто вернуть что было ...
ещё лучше решение, заставить твои дочерние окна рисовать, а потом это сразу копировать в память, тогда не понадобится сохранять каждый раз твой HDC, но придётся каждый раз при перерисовке сохранять (хотя лучше сразу рисовать в памяти, а на экран тока копировать) ...
// псевдокод для дочернего окна
OnPaint(CDC *pDC)
{
    if(m_fнуноПерерисовать)
    {
      // рисуем чего-нить
      // теперь сохраняем нарисованное в локальный контекст HDC (в память)
      m_localDC=SaveDC(pDC);
    }
    else
    {
      // копируем из локального DC в памяти
      BitBlt(/*из m_localDC в pDC*/);
      // здесь ещё и флажок можно сбросить
    }
}
// а теперь просто нужно создать пару сообщений типа -> 
// WM_BEGINMOVING ("я тебя типа подвину"), WM_ENDMOVING ("я тебя подвинул")
// и соосно в них проставлять флажок насчёт нуноПерерисовать ну и скрывать где надо.
// если лень во всех "дочках", то создать один класс с такими сообщениями и наследовать от него.


C Уважением Andir!
Re[6]: Динамическое добавление доч. и их перерисовка
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 14.08.02 06:38
Оценка:
Здравствуйте Andir, Вы писали:

A>Здравствуйте ol-lv, Вы писали:


A>[skip]

OL>>..........................

OL>>bool date=GetLocalTime()==date_sleep_my;

OL>>HANDLE hThrd;
OL>>DWORD thID;
OL>>(date)?(SuspendThread(hThrd),Sleep(TimeSleep),ResumeThread(hThrd)):(hThrd=CreateThread(0,NULL,(LPTHREAD_START_ROUTINE)Work,0,NULL,&thID),MessageBox(0,"Ух","Я бодр",MB_OK));
A>:super:

A>[skip]


Сенкс попробую. такой финт проделать... ,))

A>C Уважением Andir!
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[6]: Динамическое создание доч.окон,и СКРОЛЛИНГ этого
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 15.08.02 07:12
Оценка:
Здравствуйте Andir, Вы писали:

A>[ccode]

A>// псевдокод для дочернего окна
A>OnPaint(CDC *pDC)
A>{
A> if(m_fнуноПерерисовать)
A> {
A> // рисуем чего-нить
A> // теперь сохраняем нарисованное в локальный контекст HDC (в память)
A> // m_localDC=SaveDC(pDC);
//Принципиально это не так SaveDC возвращает инт т.е. на сколько я понял номер сохраненного дс
// но это не проблемма
CDC cp_dc=CreateCompatibleDC(.....);
BitBlt(...cp_dc...) — это сохранит текущий дс
A> }
A> else
A> {
A> // копируем из локального DC в памяти
A> BitBlt(/*из m_localDC в pDC*/);
A> // здесь ещё и флажок можно сбросить
A> }
A>}
СУВЯ
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[7]: Динамическое создание доч.окон,и СКРОЛЛИНГ этого
От: Andir Россия
Дата: 15.08.02 07:19
Оценка:
Здравствуйте ol-lv, Вы писали:


A>>
A>>// [b]псевдокод для дочернего окна[b]
A>>[skip]
A>>

Читай внимательнее, я написал что это псевдо код, а SaveDC — это псевдофункция сохраняющая текущий DC ...
Если придираться то там куча всякой лабуды типа возврата указателя ... и т.д. но ведь это ПСЕВДО.
Напиши нормальный.
Почтавил бы нолик за ТАКОЕ, но я ж добрый ...

Удачи, Andir!
Re[8]: Динамическое создание доч.окон,и СКРОЛЛИНГ этого
От: ol-lv СССР https://youtu.be/DQDoYs6wHoo
Дата: 15.08.02 07:56
Оценка:
Здравствуйте Andir, Вы писали:
A>Почтавил бы нолик за ТАКОЕ, но я ж добрый ...
Вообщето конечно сорри, да только чтож так агрессивно? Я ж не в курсе где псевдо -SaveDC и and Real -SaveDC посему и вопрос возник ..., ... давай тогда договоримся впредь, если я или ты пишешь псевдо ф-цию добавлять префикс "psvd" чтоб отличалась от стандартной )? Миру мир )
A>
A>Удачи, Andir!
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.