Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Вопросы по Edit Control


Автор: kutuzov 26.10.2007, 21:37
Добрый день 
Есть у меня Edit Control со включенным multiline.
В него выводятся логи выполнения программы.
Не получается реализовать следующее:
Хочу сделать чтоб при изменении размера окна диалога, менялся размер Edit'a
Делаю так:
Код

void Cdsp_consoleDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);
    CRect   rect;
    this->GetWindowRect(rect);
    add_text.SetRect(rect); //add_text это контрол диалога
}

При запуске программа вылетает с ошибкой 
Debug assertion Failed!
Program...
File: afxwin2.inl


И еще одна проблема: 
Хочу чтоб при выводе текста и его проскроливании вниз позиция курсора была на последней строчке т.е. последняя строка текста была на экране, а не приходилось прокручивать окно вниз, при выводе каждой новой строки.
делаю так:
Код

    int i, count;
    POINT point;
    i = add_text.LineLength();
    count = add_text.GetLineCount();
    point.x = i;
    point.y = count;
    add_text.SetCaretPos(point);
    add_text.SetFocus();


Курсор в той же позиции ...

M
zkv
Пользуйтесь тегом "код"

Автор: Andrey44 29.10.2007, 09:53
Перед ресайзингом делай проверку if(add_text.GetSafeHwnd()!=0)

Автор: zkv 29.10.2007, 10:04
1. ты пытаешься изменить размер контрола, грубо говоря, до того как он создан. 
Один из вариантов решения: в членах класса заводим переменную типа bool, которая будет сигнализировать о том, что контролы уже созданы, в конструкторе присваиваем ей false, а в OnInitDialog() - true, OnSize() оформляем так:
Код

void Cdsp_consoleDlg::OnSize(UINT nType, int cx, int cy)
{
    
    CDialog::OnSize(nType, cx, cy);
    if( m_isControlsInitialized )
    {
        CRect   rect;
        this->GetWindowRect(rect);
        add_text.SetRect(rect); //add_text это контрол диалога
    }
}

2. 
Код

    int i, count;
    i = add_text.LineLength();
    count = add_text.GetLineCount();
    add_text.LineScroll( count, i );

Автор: kutuzov 29.10.2007, 11:55
Спасибо за ответы,
только add_text.SetRect(rect); не меняет размер edit'a ,а устанавливает область форматирования... 
Может кто подскажет как размер edit'a поменять? ...

Автор: Andrey44 29.10.2007, 13:40
add_text.SetWindowPos(....................) smile 

Автор: zkv 29.10.2007, 15:42
или MoveWindow()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)