> На самом деле размен текста 4МБ(0хFFFFFFFF) в Win32
> устанавливается строкой
> SendMessage(hEdit,EM_LIMITTEXT,(WPARAM)0,0L);
> Видимо это возможно потому, что в Win32 уже нет различия
> между локальной и глобальной кучей. По крайней мере я об
> этом читал в sdk.
я малость ошибся не 4Мб, а 4 Гб :)) max размер процесса
ну а все остальное написано в EM_LIMITTEXT
> странно что никто мне об этом не сказал. Ну это в прошлом.
> Но все-таки чтобы
> добить эту тему до конца хочу спросить:
> как мне сделать так, чтобы окно не прокручивалось, вслед за
> текстом, когда я использую EM_REPLACESEL для его вывода?
в стилях - ES_AUTOVSCROLL и ES_AUTOHSCROLL - переключи, просто сними из Window Style. пример :
DWORD dwStyle = GetWindowLong(hWndMyEdit, GWL_STYLE);
if (dwStyle & ES_AUTOVSCROLL)
dwStyle &= ~ES_AUTOVSCROLL;
if (dwStyle & ES_AUTOHSCROLL)
dwStyle &= ~ES_AUTOHSCROLL;
SetWindowLong(hWndMyEdit, GWL_STYLE, dwStyle);
в крайнем случае перехвати WM_XSCROLL в свои руки и сам веди игру.
Как пользуясь только Win32 API организовать построчный вывод текста в окно класса "edit". Если юзать SetWindowText для данного класса, то каждый новый вывод затирает предыдущий.
Класс "edit".09.07.01 01:13 Автор: kabanchik Статус: Незарегистрированный пользователь
> Как пользуясь только Win32 API организовать построчный > вывод текста в окно класса "edit". Если юзать SetWindowText > для данного класса, то каждый новый вывод затирает > предыдущий.
SendMessage(
(HWND) hWnd, // handle to destination window
EM_REPLACESEL, // message to send
(WPARAM) wParam, // undo option - TRUE or FALSE
(LPARAM) lParam // text string (LPCTSTR)
);
по текущей позиции курсора будет вставлять текст. в качестве lPrama пошли текст.
ну и в добавок еще просмотри Edit Control Messages.
Упс! Пашет...thanx. Но спрошу еще...10.07.01 14:19 Автор: Yura Статус: Незарегистрированный пользователь
> ну и в добавок еще просмотри Edit Control Messages. Посмотрел. И как я понял с окном такого типа клеится блок из локальной кучи,
(EM_SETHANDLE)
а по сему размер его 64К и большего количества символов я вывести не могу.
По крайней мере после определенной порции текста вывод прекращается.
Как мне побороть это, не прибегая к предопределенным классам VC и Builder'а?.
Можно, конечно, организовать дозированный просмотр, но полагаю, есть более гибкое решение. Спасибо еще раз.
отвечу еще :)11.07.01 02:28 Автор: kabanchik Статус: Незарегистрированный пользователь
> > ну и в добавок еще просмотри Edit Control Messages. > Посмотрел. И как я понял с окном такого типа клеится блок > из локальной кучи, > (EM_SETHANDLE) > а по сему размер его 64К и большего количества символов я > вывести не могу. > По крайней мере после определенной порции текста вывод > прекращается. > Как мне побороть это, не прибегая к предопределенным > классам VC и Builder'а?. > Можно, конечно, организовать дозированный просмотр, но > полагаю, есть более гибкое решение. Спасибо еще раз.
Решение на самом деле есть. Поменяй ОС на WinNT 4.0 или на Win2K у них ограничение 4Мб :))))
на самом деле это не шутка. действительно, Edit имеет ограничение 64К, на НТ ОС такого ограничения нет - для проверки попробуй открыть файл, скажем размером 65К с помощью Notepad, как типичный Edit, в Win9X и WinNT.
или же другой варинт - используй RichEdit - на нем нет такого ограничения.
а менять что то насильно не думаю что возможно и не советую. в крайнем случае тебе придется выводить текст кусками <= 64Kb, при скроллинге подымать другие куски, по ходу приближения к границе 64Кб. возни много будет, так что если ты не пишешь для НТ используй RichEdit и спи без головной боли.
Мда...11.07.01 16:35 Автор: Yura Статус: Незарегистрированный пользователь
> > > ну и в добавок еще просмотри Edit Control > Messages. > > Посмотрел. И как я понял с окном такого типа клеится > блок > > из локальной кучи, > > (EM_SETHANDLE) > > а по сему размер его 64К и большего количества > символов я > > вывести не могу. > > По крайней мере после определенной порции текста вывод > > прекращается. > > Как мне побороть это, не прибегая к предопределенным > > классам VC и Builder'а?. > > Можно, конечно, организовать дозированный просмотр, но > > полагаю, есть более гибкое решение. Спасибо еще раз. > > Решение на самом деле есть. Поменяй ОС на WinNT 4.0 или на > Win2K у них ограничение 4Мб :)))) > на самом деле это не шутка. действительно, Edit имеет > ограничение 64К, на НТ ОС такого ограничения нет - для > проверки попробуй открыть файл, скажем размером 65К с > помощью Notepad, как типичный Edit, в Win9X и WinNT. Так-то оно так, но имхо это релиз ноутпада для данных осей, а не класса edit.
Так-как будучи запущенной на w2k в проге вывод также обрубается.
> или же другой варинт - используй RichEdit - на нем нет > такого ограничения. > а менять что то насильно не думаю что возможно и не > советую. в крайнем случае тебе придется выводить текст > кусками <= 64Kb, при скроллинге подымать другие куски, > по ходу приближения к границе 64Кб. возни много будет, так > что если ты не пишешь для НТ используй RichEdit и спи без > головной боли. В любом случае ты прав-надо юзать ричедит этим я сейчас и занимаюсь.
Спасибо тебе за участие :-/
Мда...13.07.01 12:30 Автор: Yura Статус: Незарегистрированный пользователь
На самом деле размен текста 4МБ(0хFFFFFFFF) в Win32 устанавливается строкой
SendMessage(hEdit,EM_LIMITTEXT,(WPARAM)0,0L);
Видимо это возможно потому, что в Win32 уже нет различия между локальной и глобальной кучей. По крайней мере я об этом читал в sdk.
странно что никто мне об этом не сказал. Ну это в прошлом. Но все-таки чтобы
добить эту тему до конца хочу спросить:
как мне сделать так, чтобы окно не прокручивалось, вслед за текстом, когда я использую EM_REPLACESEL для его вывода?
> На самом деле размен текста 4МБ(0хFFFFFFFF) в Win32
> устанавливается строкой
> SendMessage(hEdit,EM_LIMITTEXT,(WPARAM)0,0L);
> Видимо это возможно потому, что в Win32 уже нет различия
> между локальной и глобальной кучей. По крайней мере я об
> этом читал в sdk.
я малость ошибся не 4Мб, а 4 Гб :)) max размер процесса
ну а все остальное написано в EM_LIMITTEXT
> странно что никто мне об этом не сказал. Ну это в прошлом.
> Но все-таки чтобы
> добить эту тему до конца хочу спросить:
> как мне сделать так, чтобы окно не прокручивалось, вслед за
> текстом, когда я использую EM_REPLACESEL для его вывода?
в стилях - ES_AUTOVSCROLL и ES_AUTOHSCROLL - переключи, просто сними из Window Style. пример :
DWORD dwStyle = GetWindowLong(hWndMyEdit, GWL_STYLE);
if (dwStyle & ES_AUTOVSCROLL)
dwStyle &= ~ES_AUTOVSCROLL;
if (dwStyle & ES_AUTOHSCROLL)
dwStyle &= ~ES_AUTOHSCROLL;
SetWindowLong(hWndMyEdit, GWL_STYLE, dwStyle);
в крайнем случае перехвати WM_XSCROLL в свои руки и сам веди игру.