VF>Дело, похоже, не в глюках. Просто Windows быстро перерисовывает "свою" часть, а клиент — долго. VF>Не понятно, что нужно перерисовывать при уменьшении размера. Масштабировать? Тогда можно на WM_ERASEBKGND не просто возвращать 1, а перерисовать прошлый буфер в нужном размере, например StretchBlt(). А потом, когда будет время, перерисовать правильно.
Мысль интересная, надо будет попробовать — возможно это наименьшее зло в данном случае.
CS>>case WM_SIZE:
CS>> // ... меняю размеры фронтбуффера и бэкбуффера под новый размер окна, перерисовываю бэкбуффер.
CS>> ::InvalidateRect(hwnd,NULL,FALSE);
CS>> ::UpdateWindow(hwnd);
CS>> return 0;
CS>>
А>Никакого эффекта. Не работает.
Значит проблема у тебя где-то еще.
InvalidateRect/UpdateWindow фосирует WM_PAINT (внутри UpdateWindow). Скорее всего или бэкбуффер у тебя медленно перерисоввыется, либо ты что-то напутал с бэкбуффер / front-buffer.
Кстати непонятно вообще зачем тебе два буффера.
CS>InvalidateRect/UpdateWindow фосирует WM_PAINT (внутри UpdateWindow). Скорее всего или бэкбуффер у тебя медленно перерисоввыется, либо ты что-то напутал с бэкбуффер / front-buffer. CS>Кстати непонятно вообще зачем тебе два буффера.
Ну да медленно. Фронтбуффер это и есть поверхность окна в оконном режиме или видеопамять если речь о полноэкранном режиме.
Вопрос о том как синхронизировать системный ресайз и отрисовку.
Re[4]: Проблема с отрисовкой при resize окна
От:
Аноним
Дата:
01.08.14 11:16
Оценка:
PD>Покажи обработчик WM_PAINT
BeginPaint(get_hwnd(), &paint_struct);
video->present(); //в недрах библиотек это Blt бэкбуффера на фронтбуффер.
EndPaint(get_hwnd(), &paint_struct);
Re[6]: Проблема с отрисовкой при resize окна
От:
Аноним
Дата:
01.08.14 11:21
Оценка:
CEM>А можно код, чтоб у себя посмотреть?
Нет конечно, проект до 500Mb под NDA
Здравствуйте, Аноним, Вы писали:
А>[ccode] А>BeginPaint(get_hwnd(), &paint_struct); А>video->present(); //в недрах библиотек это Blt бэкбуффера на фронтбуффер. А>EndPaint(get_hwnd(), &paint_struct);
Что понимается здесь под фронтбуффером ? Здесь должен быть BitBlt с бэкбуфера на hdc от BeginPaint, это так ? И ничего больше быть не должно.
With best regards
Pavel Dvorkin
Re[6]: Проблема с отрисовкой при resize окна
От:
Аноним
Дата:
01.08.14 12:24
Оценка:
PD>Что понимается здесь под фронтбуффером ? Здесь должен быть BitBlt с бэкбуфера на hdc от BeginPaint, это так ? И ничего больше быть не должно.
По сути так и есть. фронтбуффер это и есть поверхность окна в оконном режиме.
Здравствуйте, Аноним, Вы писали:
PD>>Что понимается здесь под фронтбуффером ? Здесь должен быть BitBlt с бэкбуфера на hdc от BeginPaint, это так ? И ничего больше быть не должно. А>По сути так и есть. фронтбуффер это и есть поверхность окна в оконном режиме.
Замени video->present() на нечто простое. Например, Rectangle(hdc_от_hWnd, весь размер) с рандомным цветом заливки прямоугольника. Эффект останется ?
Здравствуйте, Аноним, Вы писали:
А>Ну да медленно. Фронтбуффер это и есть поверхность окна в оконном режиме или видеопамять если речь о полноэкранном режиме. А>Вопрос о том как синхронизировать системный ресайз и отрисовку.
Ловите WM_WINDOWPOSCHANGING message, готовьте буффер ДО return;
Re: Вопрос закрыт
От:
Аноним
Дата:
01.08.14 13:43
Оценка:
Здравствуйте, Аноним, Вы писали:
Повесил на WM_ERASEBKGND: StretchBlt в итоге не обрезает изображение но теперь присутствует эффект дергания так как меняется масштаб видимых объектов вместо угла видимого обзора. Но все же это терпимее чем тупое обрезание.
Заморозить видимость системного ресайза окна до момента полной перерисовки окна я так понял нереально.
Re[2]: UPD: Вопрос закрыт
От:
Аноним
Дата:
01.08.14 17:23
Оценка:
А>Заморозить видимость системного ресайза окна до момента полной перерисовки окна я так понял нереально.
Благодаря совету здесь
Здравствуйте, Аноним, Вы писали:
А>>Заморозить видимость системного ресайза окна до момента полной перерисовки окна я так понял нереально. А>Благодаря совету здесь