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

RusFAQ.ru: Win API


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

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

Выпуск № 386
от 04.02.2007, 00:05

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


Вопрос № 73203: Здраствуйте!!! у меня проблема: могу откомпилировать взятый текст из обучалки помогите разобраться где ошибка??? и еще пару вопросов в книжках описывают загрузку картинок чтото типо того ... HBITMAP hBitmap; ... hBitmap=LoadImage...

Вопрос № 73.203
Здраствуйте!!! у меня проблема: могу откомпилировать взятый текст из обучалки помогите разобраться где ошибка???
и еще пару вопросов в книжках описывают загрузку картинок чтото типо того
...
HBITMAP hBitmap;
...
hBitmap=LoadImage(hInst,"d.bmp",IMAGE_BITMAP,nDimension*2,nDimension,LR_LOADFROMFILE);
...
у меня так не работат
зато работает так
...
HANDLE hBitmap;
...
hInst,"d.bmp",IMAGE_BITMAP,nDimension*2,nDimension,LR_LOADFROMFILE);
...
и досихпор не могу понять что такое HANDLE? часто описывает что это описатеть( описатель чего????)
и еще часто создают контекст устройства hDC и дополнительный к нему hCompatibleDC.зачем нужен дополнитеьный и когда его нужно применять??? а то в ни одной книге толком не описано ничего об этом дополнительном
спасибо!!!!

Приложение:

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

Отвечает: Лысков Игорь Витальевич
Здравствуйте, HITY!
1)Функция LoadImage возвращает тип HANDLE, который по сути есть (void*).
Поэтому при присваивании переменной HBITMAP компилятор и ругается
2)Можно исправить двумя способами: описать hBitmap как HANDLE(как у тебя)
или применить преобразование при присваивании hBitmap = (HBITMAP)LoadImage()
3)Теперь о HANDLE. Его можно понимать как указатель на некий объект.
При открытии любого объекта ОС формирует в своих недрах структуру данных,
описывающую этот объект и возвращает индекс этого объекта,
при дальнейшей работе с этим объектом мы должны указать его HANDLE, чтобы
система знала с каким объектом мы работаем
К слову, HBITMAP - частный случай HANDLE, описатель именно BITMAP. Но для компилятора это разные типы.
4)Контекст...Это тоже можно понимать, как указатель, но уже на графическую среду, в которой мы что-то там рисуем.
Чтобы что-то написать или нарисовать, надо указать где мы хотим это сделать.
Чтобы сформировать картинку без непосредственного вывода на экран, применяют
"совместимый" контекст. Его можно понимать как копию в памяти контекста реального окна.
Затем сформированную картинку можно скопировать на реальный экран или любое другое действие.
Это нужно, чтобы сделать некие манипуляции с картинкой, плюс этим достигается скорость отображения.
Если рисовать много, то рисование прямо на экране будет весьма заметно.
5)Теперь о программе. Ошибки:
а)AppendMenu(hMenu,MF_BITMAP,IDM_Bitmap,(char*)hBitmap);
Ф-я ждет параметр (char*), поэтому необходимо преобразование
б)При добавлении в меню в отработке WM_CREATE не было вызова SetMenu для
запоминания, поэтому все терялось.
Лучше все манипуляции с меню делать в одном месте.
И,наконец, скачай замечательную книгу Петзольда о WinAPI
http://anatolix.naumen.ru/oldsite/win32books.htm
И удачи в освоении WinAPI!

Приложение:

---------
Удачи!

Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 30.01.2007, 11:16
Оценка за ответ: 5
Комментарий оценки:
спасибо за помощь будем разбераться!!!

Отвечает: Ross
Здравствуйте, HITY!

Описатель - это уникальный идентификатор объекта ядра, используемого вашим процессом. Его в дальнейшем можно использовать для обращения к созданному объекту при помощи функций WinAPI. Например:

Создаем объект ядра файл, при этом в переменную заносится его дескриптор
HANDLE cFile = CreateFile("example.txt",GENERIC_READ,0,0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);

Читаем из файла, используя описатель:
ReadFile(cFile,(LPVOID)buff,10,&nBytes,0);

Если что непонятно, читайте Рихтера (Дж. Рихтер "Создание эффективных Win32 - приложений")

В вашем случае функция LoadImage возвращает хэндл на созданную в памяти картинку.
Ответ отправил: Ross (статус: 4-ый класс)
Ответ отправлен: 30.01.2007, 11:38
Оценка за ответ: 5
Комментарий оценки:
спасибо за объяснение


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

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

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

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

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


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


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

В избранное