Как засунуть кое-что в Clipboard? (новичок)
От: kl Германия http://stardog.com
Дата: 16.01.02 09:59
Оценка:
Здраствуйте!
Заранее прошу прощения за простой вопрос, но все-таки...
Есть список указателей (CObList). Используются указатели на 3 класса, потомки общего базового (не CObject).
Надо скажем парочку из экземпляров (разного размера) засунуть в буфер. Ф-ии SetClipboardData нужен хэндл. Память я выделяю с помощью
GlobalAlloc. Но КАК туда последовательно записывать объекты?!
Заранее спасибо.
no fate but what we make
Re: Как засунуть кое-что в Clipboard? (новичок)
От: Андрей Россия  
Дата: 16.01.02 12:15
Оценка:
Здравствуйте kl, Вы писали:

kl>Здраствуйте!

kl>Заранее прошу прощения за простой вопрос, но все-таки...
kl>Есть список указателей (CObList). Используются указатели на 3 класса, потомки общего базового (не CObject).
kl>Надо скажем парочку из экземпляров (разного размера) засунуть в буфер. Ф-ии SetClipboardData нужен хэндл. Память я выделяю с помощью
kl>GlobalAlloc. Но КАК туда последовательно записывать объекты?!
kl>Заранее спасибо.

Вопрос, кстати, не такой уж простой. По крайней мере не имеет общего решения. Тебе придется свою структуру описывать и ее передавать в буфер обмена Windows, а также свой формат зарегистрировать (см RegisterClipboardFormat).
Насчет записи: если ты на MFC пишешь, то проще всего через CMemFile, а если на Win32 API — см. реализацию CMemFile, она довольно простая.
Опять-же, если ты MFC юзаешь, проще будет через COleDataSource и IStream все сделать.
Re[2]: Как засунуть кое-что в Clipboard? (новичок)
От: kl Германия http://stardog.com
Дата: 16.01.02 13:27
Оценка:
Здравствуйте Андрей, Вы писали:

А>Вопрос, кстати, не такой уж простой. По крайней мере не имеет общего решения. Тебе придется свою структуру описывать и ее передавать в буфер обмена Windows, а также свой формат зарегистрировать (см RegisterClipboardFormat).

А>Насчет записи: если ты на MFC пишешь, то проще всего через CMemFile, а если на Win32 API — см. реализацию CMemFile, она довольно простая.
А>Опять-же, если ты MFC юзаешь, проще будет через COleDataSource и IStream все сделать.

Насчет регистрирования то все прозрачно...
Кстати, а зачем COleDataSource, чем SetClipboardData хуже? И то и то принимает HGLOBAL, а никакие drag & drop мне не нужны.
А вот про CMemFile я и забыл, но ты уверен что он нормально себя чуствует с блоком, выделенным GlobalAlloc?
Спасибо за ответ!
no fate but what we make
Re[3]: Как засунуть кое-что в Clipboard? (новичок)
От: Андрей Россия  
Дата: 16.01.02 13:49
Оценка:
Здравствуйте kl, Вы писали:

kl>Насчет регистрирования то все прозрачно...

kl>Кстати, а зачем COleDataSource, чем SetClipboardData хуже? И то и то принимает HGLOBAL, а никакие drag & drop мне не нужны.
COleDataSource нужен, чтобы использовать IStream — его же можно будет в Clipboard потом запихать и HGLOBAL тебе нафиг не нужен будет, а drag&drop здесь ни при чем.

kl>А вот про CMemFile я и забыл, но ты уверен что он нормально себя чуствует с блоком, выделенным GlobalAlloc?

Очень даже нормально, если правильно использовать. А лучше даже CSharedFile использовать — создаешь его, пишешь как в обычный файл, затем делаешь Detach — и получаешь готовый HGLOBAL, то есть GlobalAlloc тебе явно использовать не надо.

kl>Спасибо за ответ!

Всегда пожалуйста.
Re[4]: Как засунуть кое-что в Clipboard? (новичок)
От: kl Германия http://stardog.com
Дата: 16.01.02 14:08
Оценка:
Здравствуйте Андрей, Вы писали:

А>Здравствуйте kl, Вы писали:


kl>>Насчет регистрирования то все прозрачно...

kl>>Кстати, а зачем COleDataSource, чем SetClipboardData хуже? И то и то принимает HGLOBAL, а никакие drag & drop мне не нужны.
А>COleDataSource нужен, чтобы использовать IStream — его же можно будет в Clipboard потом запихать и HGLOBAL тебе нафиг не нужен будет, а drag&drop здесь ни при чем.

kl>>А вот про CMemFile я и забыл, но ты уверен что он нормально себя чуствует с блоком, выделенным GlobalAlloc?

А>Очень даже нормально, если правильно использовать. А лучше даже CSharedFile использовать — создаешь его, пишешь как в обычный файл, затем делаешь Detach — и получаешь готовый HGLOBAL, то есть GlobalAlloc тебе явно использовать не надо.

kl>>Спасибо за ответ!

А>Всегда пожалуйста.

Насчет CSharedFile ясно, но чего то я не догоняю насчет того, что "HGLOBAL нафиг не нужен".
Stream то я создаю через CreateStreamOnHGlobal (может не так надо??) , поэтому хэндл все равно у меня есть. Поэтому вместо COleDataObject::Attach, COleDataSource::SetClipboard, я использую SetClipboardData. Мне кажется так эффективнее, может я чего то не понимаю?
no fate but what we make
Re[5]: Как засунуть кое-что в Clipboard? (новичок)
От: Андрей Россия  
Дата: 16.01.02 14:25
Оценка:
Здравствуйте kl, Вы писали:

kl>Здравствуйте Андрей, Вы писали:


А>>Здравствуйте kl, Вы писали:


kl>>>Насчет регистрирования то все прозрачно...

kl>>>Кстати, а зачем COleDataSource, чем SetClipboardData хуже? И то и то принимает HGLOBAL, а никакие drag & drop мне не нужны.
А>>COleDataSource нужен, чтобы использовать IStream — его же можно будет в Clipboard потом запихать и HGLOBAL тебе нафиг не нужен будет, а drag&drop здесь ни при чем.

kl>>>А вот про CMemFile я и забыл, но ты уверен что он нормально себя чуствует с блоком, выделенным GlobalAlloc?

А>>Очень даже нормально, если правильно использовать. А лучше даже CSharedFile использовать — создаешь его, пишешь как в обычный файл, затем делаешь Detach — и получаешь готовый HGLOBAL, то есть GlobalAlloc тебе явно использовать не надо.

kl>>>Спасибо за ответ!

А>>Всегда пожалуйста.

kl>Насчет CSharedFile ясно, но чего то я не догоняю насчет того, что "HGLOBAL нафиг не нужен".

kl>Stream то я создаю через CreateStreamOnHGlobal (может не так надо??) , поэтому хэндл все равно у меня есть. Поэтому вместо COleDataObject::Attach, COleDataSource::SetClipboard, я использую SetClipboardData. Мне кажется так эффективнее, может я чего то не понимаю?

Я могу ошибаться, но по-моему, CreateStreamOnHGlobal нужна, чтобы получить IStream, который можно передать в Clipboard, а не наоборот.
IStream в Clipboard ты с помощью Win32API не передашь. Хотя, может быть и будет работать с HGLOBAL — я не проверял. Но как-то это все вычурно получается, проще через CSharedFile.
Re[6]: Как засунуть кое-что в Clipboard? (новичок)
От: kl Германия http://stardog.com
Дата: 16.01.02 14:56
Оценка:
Спасибо!
no fate but what we make
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.