Используйте SelectObject() в вашей памяти DC, чтобы выбрать битмап в нем. Это меня озадачивает. Я прочитал msdn, но все еще не знаю, как заполнить второй параметр SelectObject().Программирование API VC++ win32: как я могу получить изображение из буфера обмена и отобразить его в окнах?
ответ
Позвоните OpenClipbard()
, чтобы открыть буфер обмена и вызвать GetClipboardData()
с типом CF_BITMAP
, чтобы получить дескриптор данных изображения, хранящихся в буфере обмена. Если в буфере обмена нет изображения, возвращается дескриптор NULL.
Затем внутри WM_PAINT
обработчика вашего окна, используйте BeginPaint()
, чтобы получить контекст устройства для рисования в окно, и использовать CreateCompatibleDC()
создать контекст устройства памяти для растрового изображения. Используйте SelectObject()
в своей памяти DC, чтобы выбрать в нем растровое изображение, и, наконец, используйте BitBlt()
, чтобы разбить растровое изображение из памяти DC на DC окна. Не забудьте очистить - вызовите DeleteDC()
, чтобы удалить память DC, и позвоните EndPaint()
, чтобы завершить чертеж.
И наконец, позвоните по телефону CloseClipboard()
, когда закончите. Обратите внимание, что буфер обмена владеет ручкой растрового изображения, и как только вы вызываете CloseClipboard()
, растровое изображение будет уничтожено. Итак, если вы хотите повесить на растровое изображение после того, как вы закрыли буфер обмена, вам нужно будет сделать его копию.
Если у вас есть дополнительные вопросы по этому вопросу, пожалуйста, создайте * новый * вопрос вместо обновления этого. Например: «Я пытаюсь выбрать растровое изображение в DC памяти с помощью SelectObject(). Я не понимаю цели второго параметра SelectObject() даже после чтения MSDN. Что мне нужно передать в SelectObject()? " –