Программирование на Win32 API VC ++: как получить изображение из буфера обмена и отобразить его в окне? - PullRequest
4 голосов
/ 07 октября 2009

Используйте SelectObject () на вашей памяти DC, чтобы выбрать растровое изображение в нем. Это делает меня озадаченным. Я прочитал MSDN, но до сих пор не знаю, как заполнить второй параметр SelectObject ().

1 Ответ

8 голосов
/ 07 октября 2009

Позвоните OpenClipbard(), чтобы открыть буфер обмена, и наберите GetClipboardData() с типом CF_BITMAP, чтобы получить указатель на данные изображения, хранящиеся в буфере обмена. Если в буфере обмена нет изображения, будет возвращен дескриптор NULL.

Затем, внутри обработчика WM_PAINT вашего окна, используйте BeginPaint(), чтобы получить контекст устройства для рисования в вашем окне, и используйте CreateCompatibleDC(), чтобы создать устройство памяти контекст для растрового изображения. Используйте SelectObject() на вашем DC памяти, чтобы выбрать растровое изображение в нем, и, наконец, используйте BitBlt(), чтобы перетянуть растровое изображение из DC памяти в DC окна. Не забудьте очистить - позвоните DeleteDC(), чтобы удалить память DC, и позвоните EndPaint(), чтобы закончить рисование.

Наконец, позвоните CloseClipboard(), когда вы закончите. Обратите внимание, что буфер обмена владеет дескриптором растрового изображения, и как только вы вызовете CloseClipboard(), растровое изображение будет уничтожено. Поэтому, если вы хотите повесить растровое изображение после закрытия буфера обмена, вам нужно будет сделать его копию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...