![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
dimbas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 17.5.2009 Репутация: нет Всего: нет |
Необходимо отрисовать на форме изображение из буфера обмена. Есть обработчик:
Говорит, что "GetClipboardData(CF_BITMAP) has failed" =) Если GetClipboardData закомментировать и ,соответственно, раскомментировать LoadImage, все работает прекрасно, то есть, рисуется бмп из ресурса. В чем может быть проблема? Не конвертится HANDLE к HBITMAP-у? Это сообщение отредактировал(а) dimbas - 9.10.2010, 21:31 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Видимо в том, что в Clipboard лежит не Bitmap. Clipboard не может вернуть любой формат, который захочется программисту, а только тот, который в нее положили.
Точнее некоторые форматы она может конвертировать (см http://msdn.microsoft.com/en-us/library/ms...ipboard_Formats ), но далеко не все и не во все PS. Надеюсь OpenClipboard вы не забыли позвать? |
|||
|
||||
dimbas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 17.5.2009 Репутация: нет Всего: нет |
Насчет форматов это понятно) Что перед запуском проги, что во время работы копирую кусок из пейнта. Дело не в этом.
Только хотел писать "во я дурак, забыл openclipboard", но не тут то было. Читается из клипбоарда и рисуется, только исчезает после перерисовки. То есть, отрисовывается только тогда, когда вызывается InvalidateRect() по событию WM_DRAWCLIPBOARD. Урезанный код WndProc:
Можно было бы подумать, что какие-то проблемы со слежением за буфером. Но ведь как раз после Ctrl+C-то и рисуется (я открываю свою прогу слева, Пейнт справа, так чтобы он не перекрывал те 48х48, где происходит рисование, и копирую из пейнта ровно 48х48 для уверенности. Если "испортить" часть отрисованного, оно остается белым). Проверка на формат работает: если скопировать текст, прога ругается "GetClipboardData(CF_BITMAP)". Наверное, я где-то опять туплю ПС. а Опенклипбоард все-таки забыл)) upd Если читать из ресурса, то изображение остается на форме после перерисовки! upd2 Если закомментировать InvalidateRect() в case WM_DRAWCLIPBOARD и перед запуском скопировать в буфер картинку, то она отобразится сразу, но больше никогда Это сообщение отредактировал(а) dimbas - 10.10.2010, 14:25 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Видимо кто то обнуляет clipboard после первой же перерисовки (проверьте, остается ли содержимое clipboard'а)
Еще подозрительно выглядит отсутствие SelectObject на первоначальный объект после перерисовки (хотя может быть это и пройдет - надо проверить) |
|||
|
||||
dimbas |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 17.5.2009 Репутация: нет Всего: нет |
Проверил вставкой в Пейнт после перерисовки. Не обнуляет.
Простите, не понял немного)) |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Из MSDN:
|
|||
|
||||
dimbas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 17.5.2009 Репутация: нет Всего: нет |
Спасибо! Заработало!)) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |