информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Класс "edit". 09.07.01 01:13  Число просмотров: 868
Автор: 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.
<programming>
Класс "edit". 04.07.01 16:25  
Автор: Yura Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Как пользуясь только 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 для его вывода?
Мда... 13.07.01 19:42  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> На самом деле размен текста 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 в свои руки и сам веди игру.

---
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach