![]() |
|
![]() ![]() ![]() |
|
lioness |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
![]() Сделала дополнительный пункт в меню, нужно считать файл ".bmp" на поле диалога (где-то видела, как это делается массивом данных, но пример был не лучший, да и потеряла, где видела). Картинка должна быть среди прочих графических объектов "на-рАвных": то есть разрешала бы себя маркировать, перемещать по экрану и удалять. Есть что-то подходящее из MFC для прорисовки OnPaint, наверное, или... CBitmap кроме десятка Members никаких примеров текстовых не предлагает. Мои поиски в Codeguru или Codeproject были безрезультатны. "Insert picture MFC" "Paste picture MFC" ![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Конкретизируй, в чем твоя проблема - не знаешь как загрузить, как разместить или что?
Если вообще ничего не знаешь - ищи по форуму, по отдельности, все более менее было. Что касается твоих запросов к CodeGuru и т.д. - это все же не гугл, ищи по конкретным ключевым словам - типа CBitmap. И здесь тоже. И еще, вот это не поняла:
Если под графическими объектами ты подразумеваешь контролы, то какие контролы разрешают себя перемещать\удалять? И что-такое "маркировать"? А если что-то другое, то что это в контексте диалога? -------------------- ... |
|||
|
||||
lioness |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
Ну да! Загрузить, разместить... Где-то видела, как считать (на firststeps, вроде бы) - не могу найти. Видела где-то занесение в Array ... Нет времени "изобретать велосипед" - лучше бы взглянуть на пример. Да искала по поиску bitmap на сайте - там всё про кнопки с оригинальными битмапами. На поле у меня много графических объектов, которые были созданы самой системой: условные изображения агрегатов, надписи, привязанные к ним, просто тексты... Это битмапная картинка должна стать одной из этих объектов. Увеличение-уменьшение, обновление экрана, привязка-отвязка и пр. - я добавлю в соответствующие процедуры, если у меня будет где-то Point или, скорее, список пойнтов, если таких картинок будет несколько. Мне бы сейчас пример: считать на пустой экран файл .bmp, суметь его полем маркировать и потянуть мышью, пересчитывая позицию, zoom-ирование. Не вижу никаких примеров в классе CBitmap, кроме Load... Create... Set... А с примером многое становится ясно само-по-себе. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Насчет загрузить bmp-file. Во-первый можно использовать класс CImage (если можешь использовать GDI+), либо ищи в форуме по словам BITMAPFILEHEADER, BITMAPINFOHEADER - это точно было. Ибо bmp -файл и CBitmap не одно и то же, и формат у них разный.
Там же наверняка есть и про "нарисовать".
Кто же знает, что у тебя за система и что это за объекты. Видимо, ты должна создать свой объект-картинку на основе имеющихся. Кстати, отдельные примеры есть и в MSDN, и много где. И искать их за тебя вряд ли ли кто будет, тем более заново писать. Разве что у кого-то прямо под рукой есть. -------------------- ... |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Вот так можно загрузить картинку и привязать её к объекту CBitmap |
|||
|
||||
lioness |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
Вот нашла, что потеряла
![]() Шаг 327 Читаем BMP файл c диска Вот этот Bitmap-Handle остается "unused????" :(
Мелочи все сделала: в меню новый item, кликаю и открывается диалог стандартный файл на считывание, фильтр дисциплинированно bmp показывает, файл выбираю, "open" и иду по этим строкам. В FileName вижу полную строку к тому файлу, который выбрала, но hBitmap - пустой. Когда потом пытаюсь прорисовать в OnDraw(СВС* pDC), то не происходит, разумеется, просто ничего. Там, где "BITMAP bm" стоит вместо информации по "bm", выданной pDoc->m_bmpBitmap.GetBitmap(&bm), полная ерунда. И как был пустой белый экран (c таким же меню, как в примере с "firststeps"), таким и остается. Это сообщение отредактировал(а) lioness - 6.10.2010, 17:05 |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
||||
|
||||
lioness |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
Заметила в примере и поставила. Вместо имени файла в "filter" поставила в апострофах _T .... Ну явно чтобы было!! Пусто. Стоят нули. Картинку со скриншотом как здесь поставить... |
|||
|
||||
Albor |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
lioness, попробуй использовать GetLastError() для определения проблемы. Вот функция из примеров в MSDN
В твоём случае, вызов этой функции будет примерно таким:
PS На всякий случай ![]() Это сообщение отредактировал(а) Albor - 8.10.2010, 06:53 |
||||
|
|||||
lioness |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
Повторила в отдельном маленьком проекте пример из firststeps ДА!!! Всё работает со страшной силой. Единственно, ругается компилятор на CFileDialog fileDialog(TRUE,NULL,"*.bmp"); и требует 6 параметров (устарел, видимо, пример на "первых шагах").
Но в HBITMAP hBitmap "выставился" благополучно адрес. Но! Я сделала другую картинку. И эта новая картинка ЧИТАЕТСЯ и в моём основном коде. Очевидно, что что-то не в порядке с моей первой тестовой картинкой. Обработку ошибки при LoadImage надо будет непременно добавить ![]() Теперь у меня OnDraw рисует только в примере от "firststeps", а в моем основном коде всё также белый экран. Но это надо ещё самой посмотреть. |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Не заблуждайся, вышеприведенный код это не обработка ошибки, - это получение кода последней ошибки и показ сообщения для определения причины неудачной отработки функции (причины возврата нулевого хэндла). |
|||
|
||||
lioness |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
Снова возвращаясь периодически к этому заданию...
1. Пример GraphWork я добавила 2. Были проблемы с организацией Array для объектов Bitmap. Пришлось сделать глобальным и "общаться" с объектами не через "set"-"get", а так, как напИсано 3. Двойной клик по полю перетаскивает ПОСЛЕДНИЙ считанный объект в ту позицию, куда кликнул 4. Размер поменять не получается (пыталась с двойным кликом на правую мышачью клавишу). 5. Пример работает, а основной код НЕТ. Строка в OnDraw()
в коротком примере NULL НЕ выдает, а в основном коде, куда, собственно, просто скопировала - ноль, хоть тресни. Соответственно, ячейка "bm" никаких данных не получает и рисовать ей нЕчего и экран остаётся пустой. Поиски информации о ошибке GetBitmap и "кто виноват" и "что делать" - ни к чему не приводят. Есть ощущение, что абзац в
не создает "правильную" связь с выбранным объектом. Проверка, что там, собственно, GetBitmap делает.... ну GetObject делает. И в маленьком примере находит объект, а в большом примере - нет. "Handle" в обоих случаях в порядке. Содержимое m_Bitmaps точно такое же, как и при создании нового объекта-картинки так и при прорисовке OnDraw(). Почему GetBitmap может выдать NULL? По каким причинам? Как подвесить zip-file простого примера, который работает? Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() |
||||
|
|||||
lioness |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
Усовершенствовала примерчик.
1. Нажать левой клавишей поближе к левому верхнему углу и держать мышиную клавишу - будет "таскаться" следом 2. Два раза кликнуть правой клавишей мыши - увеличивается постепенно. Можно продолжать "таскать" по экрану. 3. Картинок до 12 штук. Почему Array не работал с неопределенной длиной - не знаю. Привязывается к тому элементу, чей левый верхний угол ближе к маркеру. 4. В основном коде ВСЁ ТАК ЖЕ ВЫДАЕТ ошибку на GetBitmap и, разумеется, "bm" вместо нормальных данных имеет чушь: единички. Почему единички?? ![]()
То есть этот маленький пример работает, как пулемёт. Переношу в основной код ТОТ ЖЕ текст - картинки на экране неееееет. Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
lioness |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
Предыдущая проблема оказалась связанной с тем, что объект был локальный.
Новая проблема и, как вижу "грабли", на которые все наступают. РАСПЕЧАТКА на принтере. Причем, эта зараза Bitmap распечатает себя совершенно корректно даже и StretchBlt, если была загружена LoadImage вот только что. Если объект был склонирован на экран, то распечатается оригинал, а копия на принтер не выйдет. Print Preview сработает всегда правильно. Почитав жалобы в интернете, посмотрев примеры, не понимаю, чего не хватает в моём коде с Нужна ли мне палетта? Чем грозит 32 бита цвета в Bitmap: я должна контролировать сколько? 8 или больше 24? Вот два варианта:
Первый вариант я закомментировала. Но оба - не работают. Без выдачи ошибок пустой лист. Чего не хватает??? |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |