![]() |
|
|
![]()
|
|
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Пытаюсь записать картинку в ClipBoard ц помощью классов MFC, вот таким образом:
во первых дебагер на меня ругается что пользую pIData без инициализации а во вторых: на правильном ли я пути? |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 1 Всего: 5 |
Извини, конечно, но память под pIData все-таки надо выделить
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
А разве обьявлением переменной я не выделяю память?
Добавлено @ 10:18 Ладно, эту проблемму я решил. Теперь он вроде как копирует дату, но при попытке вставить её на пример в MS Paint вылетает ошибка вот в етой функцие: AFX_STATIC HGLOBAL AFXAPI _AfxCopyGlobalMemory(HGLOBAL hDest, HGLOBAL hSource) |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Так, есть продолжение:
поменял TYMED_HGLOBAL на TYMED_GDI, стало копировать картинку правилных размеров, но на кастинке неопределённый бардак. Добавлено @ 10:38 и при этом, если я хочу скопировать ещё раз уже вылетает ошибка в COleDataSource::Empty() ??? |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 1 Всего: 5 |
К сожалению, я не успел еще поработать с буфером обмена в MFC. Использовал его только через API. Могу предположить, что здесь тоже необходима возня с хендлами, как в WinAPI. Для того чтобы копировать текст, мне приходилось:
1) выделить нужное количество памяти через GlobalAlloc (обязательно!) и получить HGLOBAL 2) вызвать GlobalLock и получить "нормальный" хендл 3) записать по хендлу текст 4) вызвать GlobalUnlock 5) вызвать SetClipboardData() Скорее всего, у тебя проблема не из-за этого. Тем более, у тебя вроде HBITMAP, а не HGLOBAL. Возможно, проблема из-за того, что ты не открываешь буфер обмена перед записью в него. Хотя, может быть, pData->SetClipboard() делает это, но не уверен. Может быть, тебе нужно 1) вызвать OpenClipboard() и проверить возвращенное значение 2) вызвать EmptyClipboard() 3) здесь сделать то, что написано в твоем посте 4) вызвать CloseClipboard() Еще проблемка может быть в том, что (MSDN) After the call to CacheData the ptd member of lpFormatEtc and the contents of lpStgMedium are owned by the data object, not by the caller. Возможно, тебе нельзя использовать хендл картинки после вызова CacheData(). Копировать ее, что ли? Повторяю, в данном вопросе я абсолютно некомпетентен. В первую очередь, попробуй добавить OpenClipboard() ... CloseClipboard(). Во вторую - копируй картинку. В третью - добавь GlobalAlloc. В четвертую - жди, пока тебе не ответит кто-нибудь поопытнее. Это сообщение отредактировал(а) 0x07L - 13.8.2006, 11:06 |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Сделал вот так:
и ничего не поменялось... |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
неужели никто не знает?
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |