Вопрос № 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 Комментарий оценки: спасибо за объяснение