12.07.2005, 14:52
общий
это ответ
Здравствуйте, 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
Ну примерно так. Я нарочно не стал убивать битмап, предоставив тебе право самому решать что дальше делать. Пиши, коли возникнут вопросы.