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

RusFAQ.ru: Win API


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

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

Выпуск № 343
от 18.11.2006, 04:35

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


Вопрос № 62391: Пытался понять как вывести картинку в окно. Немного посложнее, чем в ДОСе писать по адресу A000h. Идея вроде бы такая: 1) загрузить битмэп функцией LoadBitmap 2) получить дескриптор контекста устройства дисплея для клиентской област...

Вопрос № 62.391
Пытался понять как вывести картинку в окно. Немного посложнее, чем в ДОСе писать по адресу A000h. Идея вроде бы такая:

1) загрузить битмэп функцией LoadBitmap

2) получить дескриптор контекста устройства дисплея для клиентской области заданного окна функцией GetDC.
Контекст устройства - структура данных, определяющая набор графических объектов и связанных с ними свойств, и графических режимов, которые влияют на вывод. Графические объекты включают ручку для рисования линий, кисть для окрашивания и заполнения, битмэп для копирования или прокрутки частей экрана, палитру для определения набора доступных цветов, область для отсекания и других операций, путь для операций окрашивания и рисования.
Перед возвратом дескриптора контекста устройства, оконный менеджер выбирает поверхность рисования в контексте устройства. Если приложение вызвало функцию GetDC, то размеры поверхности рисования отражают размер клиентской области. Когда приложение передаёт дескриптор одной из функций рисования интерфейса графических устройств (GDI), запрошенный вывод появляется на поверхности рисования, выбранной в контексте устройства.

3) вывести загруженный битмэп через полученный дескриптор контекста устройства дисплея для клиентской области заданного окна.
Функция BitBlt копирует прямоугольник пикселей из исходного контекста устройства в целевой. Гммм, значит надо создавать этот исходный DC функцией CreateCompatibleDC. Получаем типа виртуальное окно. Далее нужно связать загруженный битмэп с созданным DC функцией SelectObject. Далее BeginPaint,BitBlt,EndPaint. Для BeginPaint и EndPaint нужно заполнить структуру PAINTSTRUCT.

Вопросы:
Как в данном случае заполнить PAINTSTRUCT ?
Что такое логические координаты и размеры ?

Приложение:

Отправлен: 13.11.2006, 04:19
Вопрос задал: Alexei_FAQ (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: John Paramol
Здравствуйте, Alexei_FAQ!

Заполнять PAINTSTRUCT не нужно. Она сама заполняется в BeginPaint.
Я бы на вашем месте не стал заморачиваться с логическими координатами для данного случая.
Просто устанавливаете функцией SetMapMode режим MM_TEXT (впрочем он и так уже установлен по умолчанию).
Тогда логические координаты = физическим. Т.е. счет ведется в пикселях, начальная точка - в верхнем левом углу контекста, направление оси X - вправо, Y - вниз.
Логические координаты верхнего левого угла целевого прямоугольника - это сдвиг по X и по Y вашего изображения относительно верхнего левого угла окна (можно 0,0).
Исходный прямоугольник - это прямоугольник на вашем изображении, который будет отображен.
Т.е. для вывода всего изображения, координаты верхнего левого угла его будут равны 0,0.
Размеры исходного и целевого прямоугольников - это размеры вашего изображения (ширина и высота).
Получить их можно вызовом функции GetObject, которая заполнит структуру
BITMAP struc
bmType DD
bmWidth DD
bmHeight DD
bmWidthBytes DD
bmPlanes DW
bmBitsPixel DW
bmBits DD
BITMAP ends
Поля bmWidth и bmHeight будут размерами изображения в пикселях.
Если хотите, можете почитать старую книгу Фроловых "Графический интерфейс GDI в Microsoft Windows"
http://www.lcard.ru/~nail/frolov/bsp/v14/home.htm. Примеры на C++.
Удачи!
Ответ отправил: John Paramol (статус: 3-ий класс)
Ответ отправлен: 13.11.2006, 23:13
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное