![]() |
|
|
![]()
|
|
| Alexander777 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 31.12.2006 Репутация: нет Всего: нет |
Я делаю в Visual C++ v. 6.0 вручную линейный индикатор в виде растущего закрашенного прямоугольника. На этот индикатор, в середину, я хочу вывести сколько процентов работы выполнено. Как сделать так чтобы цвет выводимых цифр сильно отличался и от закрашенной части индикатора и от незакрашенной части? Напрмер, как сделать, чтобы выводимый текст складывался с цветами уже выведенного изображения (прямоугольника) по xor?
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
можно и ксорить. а можно и самому закрашивать (цвета ты всеравно знаеш)
т.е. делаеш так -- рисуеш прямоуголник. потом на временном dc рисуеш (DrawText/TextOut) текс. потому переносиш его попиксельно (GetPixel/PutPixel) (пиксели подложки (например цвет FFFFFF) не переносиш) переносиш на основную канву. а цвет пикселя выбираеш исходя из того -- перешел ли прогресс этот столбец или нет... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Alexander777 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 31.12.2006 Репутация: нет Всего: нет |
а как создать временный dc?
строка CDC dc даёт нулевые указатели на контекст устройства |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
например
|
|||
|
||||
| Alexander777 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 31.12.2006 Репутация: нет Всего: нет |
Почему-то функция GetPixel не работает (возвращает 0xFFFFFFFF)
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
удалил
Это сообщение отредактировал(а) zkv - 5.5.2007, 04:10 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
GetPixel\SetPixel не стоит использовать, когда есть BitBlt. Т.е. 1) строим совместимый контекст и выбираем туда битмап-маску (т.е. бинарный), 2) рисуем в него текст (белым по черному), 3) делаем BitBlt в экранный контекст из временного операцией, скажем, SRCINVERT. Операцию можно подобрать и поудачнее, разобравшись с кодами тернарных операций - см. MSDN. -------------------- ... |
|||
|
||||
| Alexander777 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 31.12.2006 Репутация: нет Всего: нет |
Да у меня что-то и не получается через GetPixel\SetPixel
Для теста я сделал SDI приложение и набрал следующий код:
GetPixel возвращает ошибку Интересно, как сделать, чтобы GetPixel работал? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ты не создал битмап и не выбрал его в совместимый контекст. А по умолчанию там выбран черно-белый битмап размером 1*1.
-------------------- ... |
|||
|
||||
| Alexander777 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 31.12.2006 Репутация: нет Всего: нет |
Да, теперь всё работает
Всем большое спасибо. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |