Лабораторная работа

Буфер обмена. С++

Категория:

Лабораторная работа

Дисциплина:

Системное программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Тег:

#Системное_программирование

Стоимость работы:

16 руб.

Оценка: 9
Объем страниц: 3
Год сдачи: 2022
Дата публикации: 14.06.2022

* Кроме файла с работой, также есть архив с дополнительными файлами.

Описание дополнительных файлов:

Папка LW-6 — содержит исходный код программы на языке C++

Фрагменты для ознакомления

Лабораторная работа № 6

БУФЕР ОБМЕНА

Вариант 06

 

Цель работы: изучить основы передачи между процессами информации на базе сообщения WM_COPYDATA.

Изучаемые вопросы:

1.Форматы данных. 

2. Запись информации в буфер обмена. 

3. Чтение информации из буфера обмена. 

4. Передача информации пользовательского типа.

Постановка задачи:

Создать приложение, состоящее из двух процессов: 

− первый процесс записывает текстовый файл и растровый рисунок в буфер обмена; 

− второй процесс считывает информацию из буфера обмена и отображает в окне процесса. 

*Текстовый файл и файл с растровым рисунком взять из предыдущих лабораторных

 

4.1. Форматы данных.

Форматы данных Формат Тип данных 
CF_BITMAP Растр (bitmap) в чистом виде 
CF_DIB Растр (bitmap) с заголовком BITMAPINFO 
CF_DIF Универсальный формат обмена (Data Interchange Format) 
CF_DSPBITMAP Пользовательское растровое изображение 
CF_DSPENHMETAFILE Пользовательский расширенный метафайл 
CF_DSPMETAFILEPICT Пользовательский метафайл 
CF_DSPTEXT Пользовательский текст 
СF_ENHMETAFILE Расширенный метафайл 
CF_METAFILEPICT Метафайл в стиле METAFILEPICT 
CF_OEMTEXT Текст в кодировке OEM 
CF_OWNERDISPLAY Пользовательский формат данных 
CF_PALETTE Цветовая палитра 
CF_PENDATA Формат для данных, связанных с элек- тронным пером 
CF_RIFF Файл ресурсов (Resource Interchange File Format) 
CF_SYLK Символическая ссылка 
CF_TEXT Текст 
CF_TIFF Графика в формате TIFF 
CF_WAVE Звук в формате WAVE 
CF_UNICODETEXT Текст в кодировке UNICODE 

 

4.2. Запись информации в буфер обмена.

if (OpenClipboard(hDlg))   // открываем буфер обмена
                           {
                                  if (EmptyClipboard())      // очистка буфера обмена
                                  {
                                        HGLOBAL hGl;
                                        char name[] = "Артём ПРохоров";
                                        int nSize = sizeof(name) * strlen(name);
                                        if (hGl = GlobalAlloc(GMEM_DDESHARE, nSize))   // заказыаем блок памяти
                                        {
                                               char* str = (char*)GlobalLock(hGl);
                                               memcpy(str, name, strlen(name)); //записываем данные

                                                                                                      //GlobalUnlock(hGl);
                                               SetClipboardData(CF_TEXT, hGl);

                                               MessageBox(hDlg, L"Структура успешна занесена в буфер", L"ОК", MB_OK);
                                               CloseClipboard();
                                        }
                                  }
                           }

4.3. Чтение информации из буфера обмена.

4.4. Передача информации пользовательского типа.

Результаты работы программного обеспечения:

БУФЕР ОБМЕНА

 

Выводы:

  1. OpenClipboard – открывает буфер обмена.
  2. EmptyClipboard() – очищает буфер обмена.
  3. GlobalAlloc() – заказываем блок памяти.
  4. SetClipboardData – помещение данных в буфер обмена.
  5. CloseClipboard() – закрытие буфер обмена.
  6. RegisterClipboardFormat() – регистрирует формат данных.
16