Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5

из EM_STREAMOUT в EM_STREAMIN, или зацикленные похождения капитана CALLBACK

01.11.2013, 16:22. Показов 1125. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,
есть желание скопировать часть текста одного окна richedit в другой. Не мудрствуя лукаво, составлены два коллбека и структура
Кликните здесь для просмотра всего текста
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
struct aus // Посылка
    {
    HWND to;
    char * wv;
    LONG wn;
    };
 
DWORD CALLBACK ToFrontCallback (DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
    {
    aus * a = (aus*)dwCookie;
    strncpy((char*)pbBuff, a->wv, a->wn); // копируем содержимое посылки
    *pcb=a->wn;                                    // Расписываемся
    return 0;                                          // Закрывам дверь
    }
 
DWORD CALLBACK FromBackCallback (DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
    {
    aus * a = (aus*)dwCookie;
    LONG p = 0;
    EDITSTREAM es;
    es.dwCookie = (DWORD_PTR)a;
    es.dwError = 0;
    es.pfnCallback = ToFrontCallback;// Следующий почтовый пункт
    a->wv=pbBuff;                         // Текст посылки
    a->wn=cb;                              // Длина посылки
    CHARRANGE cr;
    cr.cpMax = -1;
    cr.cpMin = -1;
    SendMessage(a->to, EM_EXSETSEL, 0, (LPARAM)&cr); // Выбираем место у получателя
    SendMessage(a->to, EM_STREAMIN, SF_RTF|SCF_SELECTION, (LPARAM)&es); // Пересылаем посылку
    *pcb=cb;
    return 0;
    }
 
// копируем текст между пометками. 
void ConsoleWindow::End()
    {
    CHARRANGE cp,cr;
    SendMessage(fronthwnd, EM_EXGETSEL, 0, (LPARAM)&cp); // сохраняем выделение получателя
    cr.cpMax = -1;
    cr.cpMin = -1;
    SendMessage(backhwnd, EM_EXSETSEL, 0, (LPARAM)&cr); // в конец текста отправителя
    SendMessage(backhwnd, EM_EXGETSEL, 0, (LPARAM)&cr); // получаем номер последнего символа
    indexes.push_back(cr.cpMax);                                       // Сохрняем
    cr.cpMin = indexes[indexes.size()-2];                              // От предпоследнего до последнего
    cr.cpMax = indexes[indexes.size()-1];
    SendMessage(backhwnd, EM_EXSETSEL, 0, (LPARAM)&cr); // Выбираем текст в отправителе
    aus a;
    a.to = fronthwnd;
    EDITSTREAM es;
    es.dwCookie = (DWORD_PTR)&a;
    es.dwError = 1;
    es.pfnCallback = FromBackCallback;
    SendMessage(backhwnd, EM_STREAMOUT, SF_RTF|SCF_SELECTION, (LPARAM)&es); // Отправляем выделеный текст в формате
    SendMessage(fronthwnd, EM_EXSETSEL, 0, (LPARAM)&cp); // Восстанавливаем выделение получателя
    }

И это не работает. Если получатель пуст, он получает сообщение 2 раза, что отрицательно воздействует на его пищеварение. Да и в противном случае ничего не происходит. Что я делаю не так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2013, 16:22
Ответы с готовыми решениями:

Задача про капитана
Администрация морского порта издала следующие распоряжения: 1. Если капитан получает специальное указание, то он должен покинуть порт на...

RichEdit->RTF->EM_STREAMOUT
Здравствуйте. Второй день пытаюсь получить форматированный текст из стороннего RichEdit'а. Узнал что надо использовать сообщение...

Зацикленные Ханойские башни
def hanoi(n, x, y): if n > 0: if x % 3 + 2 == 0: hanoi(n - 1, x, y) print(n, x, x % 3 + 1) ...

3
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.11.2013, 16:51
Что за константа такая SCF_SELECTION ? В документации описана другая: SFF_SELECTION
Они имеют разные значения.
#define SCF_SELECTION 0x0001
#define SFF_SELECTION 0x8000
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
01.11.2013, 21:03  [ТС]
castaway, Да, но нет, дело не только в этом.

Добавлено через 4 часа 1 минуту
[SOLVED] Решено.
Система имени Гавриила Аккакиевича Нипель. Делается так...

Получаем текст потоком, а вставляем RAWом, так как формат автоматически прожёвывается движком. Не спрашивайте, насколько прочная сидушка у этого велосипеда - не знаю. Главное, едет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DWORD CALLBACK FromCallback (DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
    {
    SendMessage ((HWND)dwCookie, EM_REPLACESEL, 0, (LPARAM)(char*)pbBuff);
    *pcb=cb;
    return 0;
    }
 
//...
    CHARRANGE cr;
    cr.cpMax = -1;
    cr.cpMin = -1;
    SendMessage(fronthwnd, EM_EXSETSEL, 0, (LPARAM)&cr);
    cr.cpMin = indexes[a];
    cr.cpMax = indexes[b];
    SendMessage(backhwnd, EM_EXSETSEL, 0, (LPARAM)&cr);
    EDITSTREAM es;
    es.dwCookie = (DWORD_PTR)&fronthwnd;
    es.dwError = 0;
    es.pfnCallback = FromCallback;
    SendMessage(backhwnd, EM_STREAMOUT, SF_RTF|SFF_SELECTION, (LPARAM)&es);
//...
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
13.11.2013, 17:39  [ТС]

Не по теме:

Силами Нер-Зула, Мора и Путина Я, кибермаг iCpu, приказываю тебе очнуться от долгого сна и восстать над землёй!


[UNSOLVED] Оказывается, тот метод, что я написал, работает не до конца. То есть он хорош, но при размерах текста более 64Кб начинают лезть артефакты - системные слова и Rich-форматирование\par
Я в замешательстве. Не знаю, откуда лезет, не знаю, чем закрыть брежь.\par
Идеи?\par
Invalid Command!\par
\cf1\highlight2\lang2049\f2\par
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2013, 17:39
Помогаю со студенческими работами здесь

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В общем есть у меня простой вызов...

Callback или ответ клиенту без запроса
Здравствуйте. Ситуация в кратце такая : у меня есть уже готовый сервис. Он создаёт множество объектов, все они выполняют кое-какие действия...

Похождения коня
Добрый день! Пишу программу для решения шахматной задачи "Похождения коня," ( Условие : Требуется обойти конем все 64 клетки...

приватный метод в качестве callback'а (или криво спроектированный класс?)
Есть у меня класс для работы с БД, и он большой:) В какой-то момент я подумал, что было бы неплохо добавить туда такую фишку, как директивы...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru