тормоза при перерисовке сабклассингом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

тормоза при перерисовке сабклассингом

Сообщение Avtopic » 18.08.2007 (Сб) 16:46

Здравствуйте!

Мне нужно своей форме отрезать стандартный титлбар и рамку шириной в четыре пикселя и нарисовать на нем свой титлбар и рамку в два пикселя. Не спрашивайте зачем. :)
сделал сабклассингом но форма при перетаскивании жутко тормозит, из за BitBlt в сообщении WM_NCPAINT.
Пожалуйста, подскажите, как такие вещи делается правильно. Чувствую что это делается по-другому, потому что, рисунок простейший а тормоза огромные при перетаскивании

Спасибо
Последний раз редактировалось Avtopic 18.08.2007 (Сб) 17:49, всего редактировалось 1 раз.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 18.08.2007 (Сб) 17:04

Мне нужно своей форме отрезать стандартный титлбар и рамку шириной в четыре пикселя


А если просто установить свойства ControlBox = False и Caption = "", а потом просто рисовать на форме?
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 18.08.2007 (Сб) 17:35

Я начал с этого, к сабкласингу перешел, после того как аналогичные (один к одному) тормоза получил в этом варианте тоже.
Единственное не тормозит, если рисунок форме присвоено в дезинг – е, но это меня не устраивает, при изменении размера формы рисунок “не подходит” форме.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 18.08.2007 (Сб) 19:36

keks-n, делая FireSkin, натыкался на эти же грабли. Решил юзать DDraw древний. Не знаю чем это закончилось, теперь он работает уже над другим :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 18.08.2007 (Сб) 21:47

Тормоза у меня были при рисовании картинки с альфа-каналом(стандартный AlphaBlend его Очень криво понимал, пришлось писать своё, которое из-за 2-х BitBlt нипадеццки тормозило).
Это раз.

Во вторых, для своих размеров рамки и заголовка надо самому считать размер клиентсой области окна и выдавать из в винде сабкласся WM_NCCALCSIZE, после чего рисовать только в неклиентской области. Тогда никаких тормозов не будет. И ещё - вздумаешь юзать GradientFill - рисуй примитивы по отдельности а не все одним вызовом, иначе аццкие глюки.
Далее, DDraw юзать для вывода на экран нельзя, т. к. местный клиппер делает обрезку по клиентской области, его лучше юзать для внутренней отрисовки, а потом IDirectDrawSurface2->GetDC() и BitBlt, который прально обрежет.

P. S. Я планирую через месяц вернуться к работе над компонентом, переписав всё с нуля, но, боюсь, что он в итоге будет не бесплатным.
Изображение

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 19.08.2007 (Вс) 15:56

Действительно, когда прорисовал свою рамку и Caption в не клиентской области, не тормозит, спасибо. А... это почему такой эффект?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 101

    TopList