| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Отступы RichEdit |
| Автор: Ksander1000 1.9.2010, 11:46 |
| Скажите пожалуйста - правильно ли получение текста через GetWindowText из RichEdit, и если да, то можно ли заменить на выходе отступы ввиде двух пуcтых символов ( str[5] == '' str[6] == '' так выглядит отступ |
| Автор: Ksander1000 1.9.2010, 13:27 |
| Ну например в RichEdit поле имеються: ggg (перенос на слудующию строку) ggg и если получить текст из этого поля с этими словами, то вместо ожидаемого отступа '\n' [0] 103 'g' char [1] 103 'g' char [2] 103 'g' char [3] 13 '' char [4] 10 '' char [5] 103 'g' char [6] 103 'g' char [7] 103 'g' char Можно ли сразу получить \n ? |
| Автор: GremlinProg 1.9.2010, 13:35 |
| да, теперь понятно можно использовать EM_GETTEXTEX, там за эти 2 символа CR и LF отвечает флаг GT_USECRLF, т.е. если его не будет указано то, перевод строки, по идее должен быть одним символом |
| Автор: Ksander1000 1.9.2010, 14:49 |
| Спасибо Пожалуйста раскажите ещё о структуре GETTEXTEX: получаеться cb - это размер принимаемого текста? codepage - кодировка исходного текста? lpDefaultChar, lpUsedDefChar вобще что-то не понял )) |
| Автор: GremlinProg 1.9.2010, 15:00 |
да, именно размер (не число символов) верно в MSDN все написано, так что просто перевожу: lpDefaultChar - это спец символ (в кодировке ANSI), который будет подставляться всякий раз, когда в тексте встретится "неопознанный" для выбранной (не юникод) кодировки символ, lpUsedDefChar - это указатель на булеву переменную, которая после вызова функции будет хранить признак того, что такой символ хоть раз да встретился в тексте |
| Автор: Ksander1000 1.9.2010, 15:18 |
| Большое спасибо Только как узнать размер текста, ведь вроде GetWindowTextLength возвращает длинну... Можно неольшой пример получения текста из richedit? |
| Автор: Earnest 1.9.2010, 20:06 | ||
Насколько я понимаю, это размер буфера, который ты выделяешь сам и передаешь в lParam. Выделяй с запасом.
|
| Автор: GremlinProg 2.9.2010, 09:32 | ||||||
я покажу часть враппера для RichEdit'а, это 4 простых метода класса-обертки:
Добавлено через 2 минуты и 2 секунды используемые макросы для трансляции кодировки:
Добавлено через 12 минут и 17 секунд использовать - как обычный враппер, назовем, к примеру этот класс-обертку CRichEditWrapper, тогда получить текст можно так:
hwnd - дескриптор richedit'а |
| Автор: Ksander1000 2.9.2010, 13:57 | ||
| GremlinProg спасибо, часть врайпера мне много показала Пожалуйста скажите что здесь неправильно:
В *buf что-то вроде этого '棋ꆵᕩĀ○○' Кодировка юникод ________________________________________________________________________ Кажеться нашёл причину, FindWindowEx не находит главное окно приложения (unused = CXX0030: ошибка: невозможно вычислить выражение), хотя всё указанно правильно ________________________________________________________________________ Сейчас запустил несколько раз для теста с остановка программы после поиска описателей окон (при этом код не менял), и 2 раза функция нашла описатель, но после этого GetDlgItem не мог найти описатель с той же ошибкой... |
| Автор: GremlinProg 2.9.2010, 15:53 | ||
| FindWindowEx может и не находит какое-то окно, но он тут видимо ни при чем если не хочешь использовать STL ( это все, что начинается с std:: ), то попробуй для начала разобраться в этих вопросах: 1. суть строки в С/С++ 2. дескриптора в WinAPI 3. памяти как таковой ( + работа с указателями ) третий пункт - ключевой а чтобы немного отложить час расплаты, можно пока просто поправить вызов:
|
| Автор: Ksander1000 3.9.2010, 14:20 |
| Спасибо, текст получаю из edit поля, наверное FindWindowEx так и должна работать Только осталось одно - за место отступов остаються пустые индексы масива (теперь только 1 на 1 отступ __________________________________________________________________________ Всё понял, это были '\r' |