Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Самописный Progress  (Прочитано 6802 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Lui
Гость
« : 04-08-2004 07:07 » new

Как нарисовать в самописном Progress изменение цвета теста в зависимости от уровня ползунка?
Записан
Lui
Гость
« Ответ #1 : 04-08-2004 07:14 » 

Рисуется просто FillRect'ом ползунок, а на него накладывается текст, по моему это должно делаться с помощью ROP2 режима, но как?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 04-08-2004 08:26 » 

ROP2 - не знаю, может как-то и можно. Чтоб нарисовать это совсем не обязательно.
Рисуешь прямоугольник, а поверх текст. Только это всё будет моргать, тк при вызове GDI ф-ции каждый раз всё перерисовывается. Поэтому используют двойной буффер. Те создают девайс-контекст в памяти, рисую всё в него, а потом выводят его в основной DC. Как это подробно функционирует я уже где-то на форуме рассказывал. Так вот, "вывод" в основной девайс контекст осуществляется с помощью BitBlt, которая в качестве последнего параметра получает ROP3 код. Те каким образом биты оригинала должны "складываться" с битами картинки из памяти. Может это то что ты имел ввиду, или слышал?

примерный код

rc - область вывода картинки

Подготовка буфера:
   CDC MemDC;
   MemDC.CreateCompatibleDC(pDC);
   CBitmap Bmp;
   Bmp.CreateCompatibleBitmap(pDC,rc.Width(), rc.Height());
   CBitmap *pBmpOld = MemDC.SelectObject(&Bmp);


просто для изменения цвета - в твоём случае это позиция прогресса
   static    i = 0;
   i += 1;

рисуем всё в
   MemDC.SetTextColor( RGB(255,i,0));
   CString st = _T("текст");
   MemDC.FillSolidRect(rc,RGB(i,i,i));
   MemDC.DrawText(st,rc,DT_CENTER);
   
копируем буфер в основной DC -  в данном случае нас не интересует инфа основного DC
pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &MemDC, 0, 0, SRCCOPY));
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 04-08-2004 09:03 » 

Джон, а что делает процедура

CreateCompatibleDC(pDC)
?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 04-08-2004 11:27 » 

Буквально - создаёт в памяти девайс-контекст который совместим с pDC.
Ты работаешь с ним как с нормальным DC с той лишь разницей, что непосредственный вывод результата происходит только при BitBlt. Те все промежуточные отрисовки происходят в памяти.

зы. Лёшка! Это ты! А не тебе ли я это где-то рассказывал? Про double buffering? Я понимаю, что это всё было в другой жизни - до диплома. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines