Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Студентка-007
1 / 1 / 1
Регистрация: 18.01.2016
Сообщений: 10

Вставить скриншот из буфера обмена в Picture Control

31.03.2018, 07:38. Показов 969. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! На форме имеются кнопки и Picture Control. Одна из кнопок создает скриншот, вторая помещает скриншот программы из буфера обмена в Picture Control. Может кто сталкивался с подобной задачей? Ниже представлен код кнопки, работающей со вставкой скриншота. Код частично взят на просторах интернета, сильно не ругайте я только учусь

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (OpenClipboard(0)!= 0)//открываем буфер обмена
                {
                    HBITMAP bmp;
                    HANDLE hBufH = GetClipboardData(CF_BITMAP);
 
                    bmp = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(hBufH), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
                    GetObject(hBufH, sizeof(BITMAP), &bmp);
                    
                    if (bmp == NULL)
                    {
                        MessageBox(NULL, "Error", "ERROR", MB_OK);
                        return TRUE;
                    }
                    SendDlgItemMessage(hwnd, IDC_PICTURE, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp);
                    CloseClipboard();//закрываем буфер обмена
                }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2018, 07:38
Ответы с готовыми решениями:

Нажатие на картинку (Picture Control)
Проблема в том, что нужно чтобы при нажатии на изображение оно выполняло действия.Пробовал через wm_comand.Не вышло. Размер картинки...

Загрузить изображение в picture control
Беда какая-то, что-то LoadImage, а затем SendMessage не работают. Вот код: BOOL CALLBACK MainDlgProc(HWND hWnd, UINT uMsg, WPARAM...

Picture control как с ним работать
Хочу создать Picture control через createwindow, но не могу найти как с ним работать и как создавать. Или подскажите как выводить на экран...

2
18 / 18 / 15
Регистрация: 19.03.2018
Сообщений: 49
05.04.2018, 18:25
С такой задачей не сталкивался, но вам, видимо, нужно использовать событие WM_PAINT.
Код этого обработчика будет примерно таким (пишу "на коленке", так что не проверял, и вполне могу ошибиться):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// bmp - переменная с вашим битмапом
// hPictureControl - дескриптор вашего Picture Control-а
 
HBITMAP hBitmap;
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint(hPictureControl, &ps);
HDC hMem = CreateCompatibleDC(hDC);
HGDIOBJ hBitmapOld = SelectObject(hMem, bmp);
 
GetObject(bmp, sizeof(hBitmap), &hBitmap);
BitBlt(hDC, 0, 0, hBitmap.bmWidth, hBitmap.bmHeight, hMem, 0, 0, SRCCOPY);
 
SelectObject(hMem, hBitmapOld);
DeleteDC(hMem);
 
EndPaint(hPictureControl, &ps);
1
 Аватар для Студентка-007
1 / 1 / 1
Регистрация: 18.01.2016
Сообщений: 10
08.04.2018, 11:37  [ТС]
Спасибо за ответ Решение нашла, с помощью замечательного преподавателя. Код может не самый лучший, но рабочий. Может кому пригодится.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
HDC hdc;
            HDC hdcMem;
            PAINTSTRUCT ps;
            RECT rc;
            HBITMAP hbm;
 
            hdc = GetDC(hPic);
            hdcMem = CreateCompatibleDC(hdc);
 
            if (OpenClipboard(0) != 0)//открываем буфер обмена
            {
                Isleep();
                hbm = (HBITMAP)GetClipboardData(CF_BITMAP);
                SelectObject(hdcMem, hbm);
 
                        // координаты клиентской области окна
                                   GetClientRect(hPic, &rc);                        
                                       StretchBlt(hdc, 0, 0, rc.right, rc.bottom, hdcMem, 0, 0, 390, 350, SRCCOPY);
                CloseClipboard();
            }
            else {
                MessageBox(NULL, "Error", 0, 0);
            }
            DeleteDC(hdcMem);
            ReleaseDC(hwnd, hdc);
            
            break;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2018, 11:37
Помогаю со студенческими работами здесь

Кнопка - вставить из буфера обмена
Не кто не подскажит функцию для вставки данных из буфера обмена? CTRL + V не предлагать

Как вставить из буфера обмена?
Подскажите как нажатием кнопки вставить содержимое буфера обмена в окошко другой программы, к примеру в открытый блокнот, вернее как...

QTextEdit вставить изображение из буфера обмена
Здравствуйте, собственно как это сделать? Пытался использовать QMimeData, но метод hasImage() возвращает false ( Система Ubuntu изображение...

Вставить ссылку с буфера обмена автоматом
Здравствуйте, имеем таблицу, в которой несколько ячеек объединены в одну, к примеру с A2 до D5 не могу вставить ссылку в соответствующее...

Вставить текст из буфера обмена в Edit
Доброго времени суток. Помогите разобраться с проблемой. В стороннем приложении мне нужно нажать на кнопку "Copy" по нажатии на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru