Я связался с техподдержкой.
Цель состояла в том, чтобы иметь приблизительно
240000 символов в одном
редактируемая строка текста.
Я могу воспроизвести проблему на
Windows Vista (x64 и x32 оба), но
не в Windows XP.
этот код отлично работает в XP:
BOOL ClongeditXPDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
UINT limit = m_longEdit.GetLimitText();
m_longEdit.SetLimitText(240000);
UINT limit2 = m_longEdit.GetLimitText();
CString str;
str = _T("");
for(int i = 0; i < 250000; i++)
str += _T("a");
m_longEdit.SetWindowText(str);
return TRUE; // return TRUE unless you set the focus to a control
}
Если вместо этого я использую элемент управления CRichEdit,
когда я нажимаю клавишу «конец» или «вправо
стрелка "ключ после вставки длинной строки
внутри я не вижу все
символы в элементе управления Rich Edit.
пытаясь прокрутить мимо последнего видимого
персонаж издает звуковой сигнал. Остальная часть
персонажи там, я знаю это
потому что, если я дважды щелкну богатым
Отредактируйте элемент управления и скопируйте текст, используя
Ctrl-C, а затем вставьте его в текст
редактор, я вижу 240000
персонажи. Таким образом, контроль держит
правильное количество символов, но
последние символы не отображаются
кроме как во внешнем редакторе, так что мой
оригинальная проблема остается.
Вот ответы от Microsoft
Представители:
Проблема здесь в том, что элемент управления редактирования
с большим количеством символов в
он не рисует свой текст.
Я пытался установить разные символы,
и обнаружил, что я мог бы соответствовать больше
"Я чем" х "чем" м ". Проблема
не прямо число
символы, но, скорее всего, число
пикселей. Умножая количество
видимые символы по ширине пикселя
символов в выбранном шрифте
показывает, что предел составляет около 32К
пиксели.
еще один ответ от Microsoft:
Я провел обширное исследование по этому вопросу.
и хотел бы сообщить вам о
прогресс дела.
Основная разница между
Редактирование управления на Vista и XP
что элемент управления Edit на Vista
предварительно сочиняет свои глифы для лучшего
международная поддержка (внутренне, это
заканчивается вызов ExtTextOut с
ETO_GLYPH_INDEX и массив глифов
а не строка символов.
Это в конечном итоге сохранить индексы глифа
в метафайл и так впадает в
Предел 32k пикселей. Когда слишком много
символы предоставляются, ExtTextOut
терпит неудачу и ничего не рисует. Править
управление на XP не предопределяет
глифы и так не имеют этого
проблема, но не справится
международные символы.
Элемент управления редактирования в XP обрезает
32к, но так как это за кадром это
не очевидно При прокрутке к
правильно, это начинается с первого
видимый символ, поэтому видимая часть
контроля всегда раньше, чем
32 тыс. Пикселей.
Элемент управления RichEdit рисует
начало, но после нажатия End,
правки происходят в основном за кадром.
RichEdit 3.0 и 4.1 дает аналогичные
поведение. Это похоже на 32 КБ
предел пикселей элемента управления RichEdit, как
он рисует свой текст на экране
растровое изображение перед отображением
экран.
Учитывая эти моменты, поведение
это дизайн. Вам нужно будет создать
ваш собственный контроль, чтобы получить поведение
отображения такой большой строки, как 240000
в одну строку.
и последний:
Я провел дальнейшие исследования по этому вопросу.
для нахождения любого легкого веса
Обходной путь для преодоления 32 тыс. пикселей
предел, но, к сожалению, кажется, что
для этого нет обходного пути.
Пара альтернатив, которые мы попробовали
такое RichEdit 3.0, RichEdit
4.1, используя UniScribe, используя разные шрифты и т. Д., Но ни один из них
достаточно вашего требования.
Возможно, вам нужно создать
ваш собственный контроль, если вы хотите
отображать редактируемую однострочную строку
который превышает ограничение в 32 тыс. пикселей в
Windows Vista.