Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Clipboard (запись/чтение) массива структур - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Знак _ перед функцией http://www.cyberforum.ru/cpp-beginners/thread365672.html
Читал книгу Страуструпа и наткнулся на интересную вещь: он ставил _ перед функцией. Можете объяснить, что делает этот знак? И можно еще пару примеров?
C++ планировщик движения головок Кто-нибудь знает как можно на C++создать планировщик движения головок?? Дисциплина SCAN. Если кто-то знает-помогите пожалуйста!!!! http://www.cyberforum.ru/cpp-beginners/thread365659.html
Ошибка компилятора wxDev-C++ C++
Помогите, написал пример из книги Дейтела Как программировать на С++. Написал все как в примере, при компиляции выдает ошибки: undefined reference to `WinMain@16' ld returned 1 exit status Что...
C++ Функция генерирует одинаковые случайные числа
Необходимо заполнить три массива произвольного размера случайными числами. Для заполнения массивов написана функция, но при отработке совпадающие по порядковому номеру элементы всех трех массивов...
C++ блок-схемы http://www.cyberforum.ru/cpp-beginners/thread365607.html
нарисовать блок-схему для рограммы: Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию (о размере данных) на экран.
C++ Вычислить сумму элементов массива с нечетными номерами Народ, помогите пожалуйста. Программировать не умею, препод не объясняет, только требует результатов, гразиться, поставить не зачет мне и еще половине группы.Помогите пожалуйста и если есть... подробнее

Показать сообщение отдельно
_Dan_
2 / 2 / 0
Регистрация: 09.09.2011
Сообщений: 12

Clipboard (запись/чтение) массива структур - C++

13.10.2011, 14:11. Просмотров 1021. Ответов 4
Метки (Все метки)

Привет, форумчане!
Прошу консультации по работе с буфером обмена Windows.
Нужно корректно записывать/считывать массив структур определенных мной.
По записи/чтении в буфер одного экземпляра структуры вопросов нет. Подскажите как правильно прочитать массив структур из буфера, при условии что записываться в него может различное число экземпляров. Даю свой код для наглядности.


Запись
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
28
29
30
31
32
33
34
35
36
37
38
39
struct Same_Data
{
 int X;
 float y;
};
struct Same_Data My_Data;
 
//------------------------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
  My_Data.X = 100;
  My_Data.y = 89.698;
 
  UINT format = RegisterClipboardFormat("MY_STRUCT_FORMAT"); //регистрируем наш формат данных
 
  if( OpenClipboard(NULL) )//открываем буфер обмена
  {
       HGLOBAL hgBuffer;
 
       char* chBuffer;
 
       EmptyClipboard(); //очищаем буфер
 
       hgBuffer= GlobalAlloc( GMEM_DDESHARE, sizeof(struct Same_Data) );//выделим память
 
       struct Same_Data* buffer = (struct Same_Data*)GlobalLock(hgBuffer);
 
       *buffer = My_Data;      //запишем данные в память
 
       GlobalUnlock(hgBuffer); //разблокируем память
 
       SetClipboardData(format, hgBuffer); //помещаем данные в буфер обмена
 
       CloseClipboard();       //после работы с буфером, его нужно закрыть
  } //  if( OpenClipboard(NULL) )//открываем буфер обмена
 
    return 0;
}
//************************************************************************************************************

Чтение
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
28
struct Same_Data
{
 int X;
 float y;
};
struct Same_Data;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
UINT format = RegisterClipboardFormat("MY_STRUCT_FORMAT"); //регистрируем наш формат данных
 
//прочитаем наши данные из буфера обмена
//вызываем второй раз, чтобы просто получить формат
 
Same_Data  data;
 
    if ( OpenClipboard(NULL) ) 
    {
       //извлекаем данные из буфера
       HANDLE hData = GetClipboardData(format);
       Same_Data* buffer = (Same_Data*)GlobalLock( hData );
       data = *buffer;  //заполняем структуру полученными данными
       GlobalUnlock( hData );
       CloseClipboard();
    }
 return 0;
}



Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru