Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.06.2017
Сообщений: 1
1

Демонстрация передачи информации различных форматов (текст, графика) через буфер обмена

16.06.2017, 00:36. Показов 529. Ответов 1

Здравствуйте, помогите пожалуйста, нужно сделать программу, которая демонстрирует, передачу информации различных форматов(текст, графика) через буфер обмена Clipboard.
Текст я сделал, кое как, нужно доработать. А изображения вообще ни как не получаются. Помогите, пожалуйста, с изображениями
Вот мой код
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <windows.h>
#include "stdafx.h"
 
 
// Описание функции главного окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg,
    WPARAM wParam, LPARAM lParam);
// Глобальные переменные
HINSTANCE hInst;            
char ClassName[] = "Window";        
 
char AppTitle[] = "Application Win32";  
char * text = NULL; 
 
 
 
                                    
static UINT ID_edit = 3;
static HWND hWndEdit;
int WINAPI WinMain(
    
    HINSTANCE hInstance,    
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,    
                    
    int nCmdShow)       
                        
{
    WNDCLASS wc;    
    HWND hWnd; 
    MSG msg;    
 
    hInst = hInstance;
    
 
    hWnd = FindWindow(ClassName, NULL);
 
    if (hWnd)
    {
        
    
        if (IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
        SetForegroundWindow(hWnd);
 
        return FALSE;
        
    }
    // Работающая копия не найдена - функция WinMain приступает 
    // к инициализации приложения.
    // Заполнение структуры WNDCLASS для регистрации класса окна.
    memset(&wc, 0, sizeof(wc));
    
    wc.lpszClassName = ClassName;           // Имя класса окон
    wc.lpfnWndProc = (WNDPROC)WndProc;      // Адрес оконной функции
    wc.style = CS_HREDRAW | CS_VREDRAW;         // Стиль класса окон
    wc.hInstance = hInstance;               // Экземпляр приложения
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);     // Пиктограмма для окон
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);       // Курсор мыши для окон
                                                    //  wc.hbrBackground = GetStockObject(WHITE_BRUSH); // Кисть для окон
    wc.lpszMenuName = NULL;             // Ресурс меню окон
    wc.cbClsExtra = 0;              // Дополнительная память
    wc.cbWndExtra = 0;              // Дополнительная память
                                    // Pегистрация класса окна.
    RegisterClass(&wc);
    // Создаем главное окно приложения.
    hWnd = CreateWindow(
        ClassName,          // Имя класса окон
        AppTitle,           // Заголовок окна 
        WS_OVERLAPPEDWINDOW,        // Стиль окна
        CW_USEDEFAULT,          // X-координаты 
        CW_USEDEFAULT,          // Y-координаты 
        CW_USEDEFAULT,          // Ширина окна
        CW_USEDEFAULT,          // Высота окна
        NULL,               // Дескриптор окна-родителя
        NULL,               // Дескриптор меню окна
        hInst,              // Дескриптор экземпляра приложения
        NULL);              // Дополнительная информация
    
    if (!hWnd)
    {
        // Окно не создано, выдаем предупреждение.
        MessageBox(NULL, "Create: error", AppTitle, MB_OK | MB_ICONSTOP);
 
        return FALSE;
    }
 
    // Отображаем окно.
    ShowWindow(hWnd, nCmdShow);
    // Обновляем содержимое клиентской области окна.
    UpdateWindow(hWnd);
//Текстовое окно
    hWndEdit = CreateWindow("edit", NULL,
        WS_CHILD | WS_VISIBLE | ES_LEFT | WS_BORDER | WS_CLIPSIBLINGS | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_DLGFRAME,
        20, 40, 450, 150, hWnd, (HMENU)ID_edit, hInst, NULL);
 
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
 
        DispatchMessage(&msg);
 
    }
    return msg.wParam;
 
}
// Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg,
    WPARAM wParam, LPARAM lParam)
{
    //Берем текст из буфера
    OpenClipboard(hWnd);
    HANDLE hData = GetClipboardData(CF_TEXT);
    text = (char*)GlobalLock(hData);
    SetWindowText(hWndEdit, text);
    GlobalUnlock(hData);
    CloseClipboard();
 
    switch (msg)
    {
        case WM_DESTROY:    // Пользователь удалил окно.
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2017, 00:36
Ответы с готовыми решениями:

Можно ли скопировать текст в одном активити, и вставить через буфер обмена в другое?
как используя буфер обмена (класс clipboard )скопировать текст в одном активити и вставить из...

Копирование информации в буфер обмена
Добрый вечер. У меня следующая проблема: внутри макроса не получается сделать копирование в буфер...

Перевод календарных дат различных форматов в текст
Дали такую тему курсача. Написал пока только перевод самого месяца,но только в одном формате......

Как вводить текст из документов различных форматов
Здравствуйте. У меня такая проблема. При разработке консольного приложения, ввод текста у меня...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
1
44 / 44 / 13
Регистрация: 06.09.2010
Сообщений: 99
17.06.2017, 21:27 2
Как вариант "в лоб":
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <Windows.h>
 
const char *g_MainWindowName = "Draw BMP";
const char *g_MainWindowClass = "DrawBMPMainWindow";
 
HWND NextClipboardViewer;
 
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Command, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT pst;
    HDC dc;
    HDC cdc;
    HBITMAP hbm;
    BITMAP bmi;
    RECT rc;
    switch (Command)
    {
 
        case WM_DESTROY:ChangeClipboardChain(hwnd,NextClipboardViewer);
                        PostQuitMessage(0);
                        break;
 
        case WM_PAINT:  dc=BeginPaint(hwnd,&pst);
                        if (IsClipboardFormatAvailable(CF_BITMAP))
                        {
                            OpenClipboard(hwnd);
                            hbm=GetClipboardData(CF_BITMAP);
                            CloseClipboard();
                            cdc=CreateCompatibleDC(dc);
                            SelectObject(cdc,hbm);
                            GetObject(hbm,sizeof(BITMAP),&bmi);
                            
                        
                            GetClientRect(hwnd,&rc);
                            SetStretchBltMode(dc,HALFTONE);
                            StretchBlt(dc,0,0,rc.right,rc.bottom,cdc,0,0,bmi.bmWidth,bmi.bmHeight,SRCCOPY);
                            DeleteDC(cdc);
                        }
                        EndPaint(hwnd,&pst);
                        break;
        case WM_CHANGECBCHAIN:
                        if ((HWND)wParam==NextClipboardViewer) NextClipboardViewer=(HWND)lParam;
                        SendMessage(NextClipboardViewer,Command,wParam,lParam);
                        break;
        case WM_DRAWCLIPBOARD:
                        SendMessage(NextClipboardViewer,Command,wParam,lParam);
                        InvalidateRect(hwnd,0,0);
                        UpdateWindow(hwnd);
                        break;
 
        default:return DefWindowProc(hwnd,Command,wParam,lParam);
    }
    return 0;
}
 
 
 
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE phInst, LPSTR lpszCmdLine, int nCmdShow)
{
    WNDCLASSEX MainWindowClass =
    {
        sizeof(WNDCLASSEX),
        CS_VREDRAW | CS_HREDRAW,
        WndProc,
        NULL,
        NULL,
        hInst,
        LoadIcon(MainWindowClass.hInstance, IDI_APPLICATION),
        LoadCursor(0, IDC_ARROW),
        GetStockObject(WHITE_BRUSH),
        NULL,
        g_MainWindowClass,
        LoadIcon(MainWindowClass.hInstance, MAKEINTRESOURCE(IDI_APPLICATION))
    };
    if (!RegisterClassEx(&MainWindowClass))
    {
        return 1;
    }
 
    HWND hwnd = CreateWindow(g_MainWindowClass, g_MainWindowName, WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, NULL, NULL, hInst, NULL);
    NextClipboardViewer=SetClipboardViewer(hwnd);
    if (!hwnd)
    {
        return 2;
    }
    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);
 
    MSG msg;
    while (GetMessage(&msg, 0, 0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2017, 21:27

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Буфер обмена(получение и передача информации)
Всем привет. Мне необходимо получить данные из буфера обмена(данные могут быть любые, картинка,...

Поместить текст в буфер обмена
Собсна Здравствуйте. Мне нужно реализовать такой процесс чтобы определенный текст заносился в...

Скопировать текст в буфер обмена
Здравствуйте! Как скопировать текст в буфер обмена?

Скопировать текст в буфер обмена
Доброго всем времени суток! Мне нужно скопировать текст промокода в буфер при клике: &lt;div...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.