Есть SDI интерфейс и в нем диалог, когда в диалоге я вожу slider нужно чтобы в это время выполнялся OnDraw в SDI, как правильно это сделать?
Сейчас использую Invalidate для главного окна, но появилась проблема — если слишком быстро водить slider то обновление замирает, т.е. почему-то приложение не ждет окончания OnDraw. Идеально было бы сделать какую-нибудь переменную которая обнулялась бы перед циклом а затем туда (уже после обработки OnDraw) заносилось бы какое-нибудь значение, но как это сделать. Полез было в WaitForSingleObject, но там дремучий лес. Help people!!!
Здравствуйте Scvorcov Dmitriy, Вы писали:
SD>Есть SDI интерфейс и в нем диалог, когда в диалоге я вожу slider нужно чтобы в это время выполнялся OnDraw в SDI, как правильно это сделать?
SD>Сейчас использую Invalidate для главного окна, но появилась проблема — если слишком быстро водить slider то обновление замирает, т.е. почему-то приложение не ждет окончания OnDraw. Идеально было бы сделать какую-нибудь переменную которая обнулялась бы перед циклом а затем туда (уже после обработки OnDraw) заносилось бы какое-нибудь значение, но как это сделать. Полез было в WaitForSingleObject, но там дремучий лес. Help people!!!
Что-то я не совсем понял. Можно поподробнее о том,что за цикл, и куда нужно заносить значение?
Любите книгу — источник знаний (с) М.Горький
Re[2]: sdi и invalidate
От:
Аноним
Дата:
03.05.02 02:39
Оценка:
Здравствуйте Bell, Вы писали:
B>Здравствуйте Scvorcov Dmitriy, Вы писали:
SD>>Есть SDI интерфейс и в нем диалог, когда в диалоге я вожу slider нужно чтобы в это время выполнялся OnDraw в SDI, как правильно это сделать?
SD>>Сейчас использую Invalidate для главного окна, но появилась проблема — если слишком быстро водить slider то обновление замирает, т.е. почему-то приложение не ждет окончания OnDraw. Идеально было бы сделать какую-нибудь переменную которая обнулялась бы перед циклом а затем туда (уже после обработки OnDraw) заносилось бы какое-нибудь значение, но как это сделать. Полез было в WaitForSingleObject, но там дремучий лес. Help people!!!
B>Что-то я не совсем понял. Можно поподробнее о том,что за цикл, и куда нужно заносить значение?
А>Вот такой код стоит в диалоге:
А>DoImage(); А> А>CMainFrame* pAppFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
pAppFrame->>Invalidate(false);
А>А вот здесь нужно дождаться окончания pAppFrame->Invalidate(false), т.е. OnDraw в SDI.
А>По идее должно быть что-то типа:
А>state=1; А>while(state); //state меняется в OnDraw на 0, после окончания обработки. А>....
А>Но так не работает.... А>
Я бы попробовал так:
в класс CMainFrame добавляется мембер CCriticalSection m_critSection;
В диалоге:
DoImage();
CMainFrame* pAppFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CSingleLock lock(&pAppFrame->m_critSection);
lock.Lock();//Ожидаем, пока не завершится OnDraw.
//В функции Lock() также можно задать интервал ожидания, и если он превышен,
//выйти из функции
pAppFrame->>Invalidate(false);
lock.Unlock();