Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 104
от 16.07.2005, 21:30

Администратор:Калашников О.А.
В рассылке:Подписчиков: 246, Экспертов: 16
В номере:Вопросов: 1, Ответов: 2


Вопрос № 23365: Здравствуйте, уважаемые эксперты! Я сейчас пишу программу (некую игру), и основная часть уже готова, но я столкнулся с одной проблемой. Объясните, как на чистом WinApi нарисовать в моем окне изображение из внешнего .bmp файла или из ресурсов в за...

Вопрос № 23.365
Здравствуйте, уважаемые эксперты!
Я сейчас пишу программу (некую игру), и основная часть уже готова, но я столкнулся с одной проблемой. Объясните, как на чистом WinApi нарисовать в моем окне изображение из внешнего .bmp файла или из ресурсов в заданном месте. Перерыл кучу материла, статей, MSDN и т.д, но толком ничего не понял.
С помощью MFC отрисовывать bmp я не хочу, т.к. нет смысла переделывать все заново из-за одной графики. Еще буду очень признателен, если вы расскажете о Display Device Contexts
Заранее благодарен
Отправлен: 11.07.2005, 21:24
Вопрос задал: Dts (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Алексей Смуриков
Здравствуйте, Dts!
Есть несколько вариантов:
1. Создаёшь Static окно со свойством SS_BITMAP и т.д.
2. Работаешь через контекстное устройство
Ответ отправил: Алексей Смуриков (статус: Студент)
Отправлен: 12.07.2005, 09:18
Оценка за ответ: 3
Комментарий оценки:
1. меня как раз это самое "и т.д." и интересует!!
2.я знаю, что через него нужно работать, но как??

Отвечает: Jadd
Здравствуйте, Dts!
Все очень просто. Смотри. Есть функция, которая одинаково работает как с файлом, так и с ресурсами - LoadImage. Она возвращает хэндл загружаемого объекта. Объектом может быть и битмап, и курсор, и иконка (посмотри пример создания окна на WinAPI...там иконка загружается именно этой функцией). А дальше просто получаем DC и рисуем на нем. Вот пример (битмап в ресурсе, с файлом аналогично, но нужно выставить другие флаги...про них читай в MSDN):

HBITMAP hBmp = (HBITMAP) LoadImage(GetModuleHandle(NULL), //берем хэндл по дефолту
MAKEINTRESOURCE(IDR_MYBITMAP), //берем битмап из ресурса (тут может быть твой идентификатор)
IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR); //получаем истинные размеры

RECT rect;
//я ставлю свои размеры ректа, куда будем вписывать картинку, ты ставь свои

rect.top = 10;
rect.left = 10;
rect.bottom = rect.top + 100;
rect.right = rect.left + 100;

//создадим исходное dc
HDC hMemDc = CreateCompatibleDC(NULL); //создали контекст впамяти, совместимый с экраном
HDC hDC = GetDC(hWnd); //получим DC через хэндл окна

//поместим рисунок в контекст устройства в памяти, т.е. hMemDC
HBITMAP hbmpOld = SelectObject(hMemDC, hBmp); //и не забудем сохранить старый

//теперь рисуем нашу картинку в рект на DC окна
BitBlt(hDC, rect.left, rect.top, rect.right, rect.bottom, hMemDC, 0, 0, SRCCOPY);

//теперь селектим старый битмап в hMemDC
SelectObject(hMemDC, hbmpOld);
DeleteDC(hMemDC); //убиваем ненужный DC

Ну примерно так. Я нарочно не стал убивать битмап, предоставив тебе право самому решать что дальше делать. Пиши, коли возникнут вопросы.

---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 12.07.2005, 14:52
Оценка за ответ: 5
Комментарий оценки:
Спасибо!! Вроде разобрался..но появились еще некоторые вопросы, попозже и их изложу..


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.winapifaq
Отписаться
Вспомнить пароль

В избранное