![]() |
|
|
![]()
|
|
| ShurikA |
|
||||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Есть вот такой код:
При загрузки картинки из фаила:
при том что:
При прорисовке:
и так... Когда я поднимаю любую картинку, поднимается чёрный квадрат на котором прекрасно бырисовывается measureMgr->Paint(&dcFull); но правда белого цвета а не того как я задаь (зелёного)... |
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Не вижу, что у тебя там зеленое должно быть?
Если то, что рисует measureMgr->Paint, так приведи его код. -------------------- ... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Сразу сложно сказать. Попробуй сначала локализовать проблему: где пропадает картинка в dcFull или dcMain.
А еще есть одна ошибка: перед созданием CompatibleBitmap ты делаешь старому Detach. Это нехорошо - чревато утечкой GDI-ресурсов. Делать надо DeleteObject(). Добавлено @ 18:34 И еще: создавал бы ты контексты, совместимые с экраном, а не с твоим растром. Тебе ведь на экран выводить надо, а растр модет попасться, например, черно-белый. -------------------- ... |
|||
|
||||
| ShurikA |
|
||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
если так то всё работает, но мне удобнее было бы со всем этим монипулировать (зум, сдвиги и т.д.) если это двумя разными контекстами. что значит попасться??? Разве я не могу его сам определить? и разве вот это его не определяет:
Это сообщение отредактировал(а) ShurikA - 22.3.2006, 21:04 |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
И чему это противоречит? Создавай оба контекста по экранному, а не по растровому. Дело в том, что именно копирование между совместимыми контекстами происходит быстро (т.к. у них одинаковый формат памяти). А если контексты имеют разную цветность, то нужен дополнительный маппинг цветов. Так что нет особого смысла создавать совместимые контексты не по экрану. По идее должен создасться контекст такой же цветности, как растр... Это значит, если растр серый, то ты не сможешь цветом рисовать. У меня есть некоторые сомнения, что в качестве параметра CreateCompatibleDC можно использовать контекст, полученный от растра... Для проверки запроси у совместимого битмапа сразу после создания... -------------------- ... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
УРААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!
Решилось вот так:
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Как это правильно сделать? размер окна может меняться... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В качестве аргумента для CreateCompatibleDC и CreateCompatibleBitmap используй контекст окна или всего дисплея, а не контекст растра. И какая разница, какие там размеры.
-------------------- ... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Вовсе нет... кто мешает создать один раз? От того, что ты освободишь экранный контекст, созданный по нему совместимый контекст не протухнет. При создании совместимого контекста всего лишь копируются некоторые параметры исходного (к битмэпу это тоже относится). Кроме того, наиболее емкая операция - это выделение и копирование битмэпа. Так что можно хранить только битмэп, а контекст создавать каждый раз заново - по времени это семечки. А вот куча лишних переменных, хранимых в классе, засоряет его определение... ИМХО.
-------------------- ... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Earnest,
Я не об этом, а о том что если создать контекст один раз по размеру окна то он и быдет в размер окна в момент создания. А что будет если юзер делает переразмерку самого окна? Скажем так: Имеет ли смысл делать контекст в который при прорисовке быдет всё копироваться, и только потом на экран? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Не контекст в размер экрана, а битмэп... но в вобщем я поняла... Можно, конечно, ловить WM_SIZE и инициализировать контекст заново. Но если включена опция "показывать содержимое окна во время ресайза", то, наверное, может притормаживать... Не знаю, не пробовала. Я обычно использую совместимые контексты двумя способами: 1) для самопальных контролов, чтобы избежать мерцания. Тогда я просто создаю временный контекст и битмэп каждый раз на OnPaint. 2) как виртуальную подложку для "большого" рабочего экрана, чтобы ускорить вывод графики. Тогда делаю подложку на весь экран. Это больше чем нужно (есть ведь еще рамки-заголовки-скроллы), но так проще, и чего ее (память) жалеть. Потом нужно только ловить сообщение об изменении размеров дисплея (если по-хорошему).
Конечно, имеет - это борьба с мерцанием. -------------------- ... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Нет, это как раз довольно быстро. Я имею в виду только создание. StretchBlt - уже относительно долго (зависит от размеров, конечно). Но твой случай, конечно, второй, когда нужна постоянная подложка - растр ведь может быть довольно большим, да и еще какая-то графика у теюя есть. CDC* CWnd::GetDC() (потом не забудь сделать ReleaseDC). Или просто CWindowDC dc(CWnd*); или CClientDC dc(CWnd*); -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |