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!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.