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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Графическое изображение (MSVC 6)  (Прочитано 14502 раз)
0 Пользователей и 1 Гость смотрят эту тему.
altosso
Гость
« : 07-02-2007 09:20 » 

Господа, помогите решить проблемку. Никогда не сталкивался с отображением графич. файлов в MSVC 6.
Задача такая:
есть некий прямоугольник, являющийся шаблоном, в котором четко определено несколько областей (тоже прямоугольники). В каких-то из этих областей необходимо отображать некие картинки, хранящиеся на диске (*.jpg, *.bmp и т.п.).
В некоторых областях необходимо отображать текст, причем длина текста может быть различной, поэтому надо подгонять размер шрифта под размер выделенной под этот текст области.
Записан
Джон
просто
Администратор

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

« Ответ #1 : 07-02-2007 10:51 » 

2 варианта

1. Всё рисуется в одном окне, в одном девайс контексте.
Всё области - объекты, которые знают что (тексты, графики и тд) и где (они получают прямоугольник относительно родительского окна, например при инициаллизации) надо рисовать. Они получают ф-ю Draw(CDC *pDC), параметр будет передаваться из родительского окна. В родительском окне в ф-ции OnPaint бежит цикл по всем объектам, в котором вызывается ф-я Draw. Поэтому имеет смысл сделать родительский класс. Незабыть двойной буфер. Недостаток - отрабатываение сообщений мыши и клавиатуры (если такие требуются).

2. Каждый элемент представляет собой самостоятельное окно (public CWnd)
Родительское окно создаёт объекты (Create) и они работают самостоятельно.
Преимущество - управление мышкой и клавой. Недостаток - если требуется общий фон, или другими словами, они должны быть прозрачными. Тогда лучше вариант 1.

Алгоритмы отображения в обоих случаях одинаковые. Разница только в получении DC.

Если не требуется экзотики для картинок, для BMP JPG на винде с ИЕ, проще всего воспользоваться IPicture  (поищи на форуме, уже несколько раз было, даже с кодом).

С шрифтами тоже очень просто. Сначала вызываешь и "измеряешь" текст (в GDI GetTextExtentPoint32, GetTabbedTextExtent; GDI+: MeasureString), если не подходит, уменьшаешь размер шрифта и снова измеряешь, и тд пока не подойдёт.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
nikedeforest
Команда клуба

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

« Ответ #2 : 07-02-2007 18:28 » 

Джон, а почему прозрачный фон окна ты относишь к недостатку? Вроде с этим проблем нет особых?
Записан

ещё один вопрос ...
Джон
просто
Администратор

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

« Ответ #3 : 07-02-2007 23:52 » 

Джон, а почему прозрачный фон окна ты относишь к недостатку?

Где это я прозрачный фон относил к недостатку? Я сказал, что это недостаток второго метода. Если необходимо, чтобы контрол был прозрачным.

Цитата
Вроде с этим проблем нет особых?

С прозрачным фоном у контролов? Нууууу дык, эт как сказать. Ага  Можешь примерчик здесь выложить? У меня всегда с этим проблемы.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
nikedeforest
Команда клуба

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

« Ответ #4 : 08-02-2007 04:13 » 

Джон, я процитирую тебя, когда ты отвечал на мой подобный вопрос
Цитата
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   pDC->SetBkMode(TRANSPARENT);
   return (HBRUSH) GetStockObject(HOLLOW_BRUSH);
}

и всё прозрачно как слеза.
Записан

ещё один вопрос ...
Daniloff
Помогающий

ru
Offline Offline

« Ответ #5 : 08-02-2007 09:08 » 

Почитай доки на GDI+
Там все просто, и работа с jpg форматом, и с bmp тем более, и с текстом.
Записан
Джон
просто
Администратор

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

« Ответ #6 : 08-02-2007 17:02 » 

nikedeforest, Улыбаюсь

Это наверняка было про MFC диалог и про стандартные MFC объекты - кнопки, статики, эдиты  и тд, которые посылают это сообщение родительскому окну. В самом же общем случае это не сработает.
Нууу,  или надо будет воспроизвести этот механизм в своих контролах, а это поверь очень геморрно. Аааа я кажется понял, что ты имеешь ввиду. Недостаток, в том плане, что геморрно, а не невозможно. Как правило достаточно одного, те либо показывать, без мышки и клавы, тогда первый. А с сообщениями - редко когда нужен прозрачный фон. В общем дело вкуса и времени.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
nikedeforest
Команда клуба

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

« Ответ #7 : 08-02-2007 17:28 » 

Я не помню, но кажется я реализовал это на АПИ.  Но точно говорить не буду. Любуюсь .НЕТ, там это делается в легкую. Да и контрол там свой, дочерний от какого-то создать намного проще, чем это делалось на АПИ и на МФЦ.
Записан

ещё один вопрос ...
asker
Помогающий

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

« Ответ #8 : 10-02-2007 16:22 » 

altosso, используя GDI+ то, что тебе надо - можно сделать без особого гемороя.
На сайте RSDN даже статья(и) по этому поводу есть http://rsdn.ru/article/gdi/gdiplus1.xml - первая часть.
Подгонять размер текста я не пробовал, но по словам Джона - это просто.
Записан

С уважением, asker
asker
Помогающий

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

« Ответ #9 : 10-02-2007 16:23 » 

у меня на ГОСах подобное задание было
Записан

С уважением, asker
Джон
просто
Администратор

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

« Ответ #10 : 10-02-2007 20:22 » 

по словам Джона - это просто.

На всякий пожарный, чтобы меня не поняли превратно - просто только в рамках сказанного мной - получить прямоугольник, сравнить, уменьшить размер шрифта, операцию повторить. Если вдруг захочется уменьшить только высоту или расстояние между буквами, строчками - геморр ещё тот. Но я думаю задача такая не стоИт. Это в крутых ДТПшных прогах такое требуется.

зы с GDI+ жизнь гораздо легче кажется, только опять же, в самом общем случае её надо с собой таскать.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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