Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 08.05.2018, 18:51   #1
My_Number245
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 17
Репутация: 10
По умолчанию Копирование bmp-картинки в буфер обмена

Здравствуйте, такая проблема. Есть у меня HBITMAP прочитанной картинки (допустим, из файла прочитал). Нужно скопировать картинку в буфер, используя Си (не C++), без использования сторонних библиотек. Загвоздка в том, что только начинаю учить WinAPI, перекопал кучу сайтов, но понятных примеров не нашел. Копировать текст в буфер научился, а с картинками проблема. Хотелось бы пример с комментариями, как оно работает, или ссылок на литературу (где будет описано на си, а не на плюсах). Помогите разобраться

Последний раз редактировалось My_Number245; 08.05.2018 в 18:58.
My_Number245 вне форума   Ответить с цитированием
Старый 08.05.2018, 19:14   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,471
Репутация: 1667
По умолчанию

Ну так покажите как копируете текст, я вам скажу как исправить для HBITMAP
waleri вне форума   Ответить с цитированием
Старый 08.05.2018, 19:36   #3
My_Number245
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 17
Репутация: 10
По умолчанию

Код:

				switch(cmd)
				{
					case MY_COPY:
						char *dest;
						HGLOBAL hgl;
						hgl = GlobalAlloc(GHND, BUFSIZE);
						GetDlgItemText(hw, MY_TEXT, buf, BUFSIZE-1);
						dest = (char *)GlobalLock(hgl);
						strcpy(dest, buf);
						OpenClipboard(NULL);
						EmptyClipboard();
						SetClipboardData(CF_TEXT, hgl);
						CloseClipboard();
						GlobalUnlock(NULL);
						return TRUE;
                                   }

Я копирую из поля Edit, BUFSIZE = 1024, cmd - код команды

Последний раз редактировалось My_Number245; 08.05.2018 в 19:43. Причина: 2 раза отправилось, извиняюсь за спам
My_Number245 вне форума   Ответить с цитированием
Старый 08.05.2018, 19:39   #4
My_Number245
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Ну так покажите как копируете текст, я вам скажу как исправить для HBITMAP
Код:

				switch(cmd)
				{
					case MY_COPY:
						char *dest;
						HGLOBAL hgl;
						hgl = GlobalAlloc(GHND, BUFSIZE);
						GetDlgItemText(hw, MY_TEXT, buf, BUFSIZE-1);
						dest = (char *)GlobalLock(hgl);
						strcpy(dest, buf);
						OpenClipboard(NULL);
						EmptyClipboard();
						SetClipboardData(CF_TEXT, hgl);
						CloseClipboard();
						GlobalUnlock(NULL);
						return TRUE;
                                   }

Я копирую из поля Edit, BUFSIZE = 1024, cmd - код команды
My_Number245 вне форума   Ответить с цитированием
Старый 08.05.2018, 21:11   #5
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,471
Репутация: 1667
По умолчанию

Замените
Код:

SetClipboardData(CF_TEXT, hgl);

на
Код:

SetClipboardData(CF_BITMAP, hBitmap);

Цитата:
Сообщение от My_Number245 Посмотреть сообщение
GlobalUnlock(NULL);
Это лишнее - надо unlock тому, что до этого lock.
waleri вне форума   Ответить с цитированием
Старый 08.05.2018, 21:23   #6
My_Number245
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Замените
Код:

SetClipboardData(CF_TEXT, hgl);

на
Код:

SetClipboardData(CF_BITMAP, hBitmap);


Это лишнее - надо unlock тому, что до этого lock.
Спасибо большое, все заработало)
My_Number245 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование из listview в буфер обмена bender42 Общие вопросы Delphi 1 21.06.2012 23:37
Копирование в буфер обмена Abuhamed JavaScript, Ajax 2 05.02.2012 02:20
Копирование в буфер обмена motorway JavaScript, Ajax 1 10.04.2011 07:36
Копирование в буфер обмена Xanex Общие вопросы Delphi 5 18.05.2009 23:13
Копирование структуры в буфер обмена bill Общие вопросы Delphi 14 20.11.2007 18:22


19:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru