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


Автор: east 13.3.2008, 13:07
Всем привет!
Обьясните, пожалуйста, кто знает, как обновить данные в CEdit. Смысл такой, нажимаю кнопку и пошла обработка информации. По мере обработки в окне редактирования меняется информация. При использовании UpdateData(FALSE) появляется только последние данные. Код такой:
Код

void CSentDlg::OnBnClickedButtonSent()
{
       обработка данных
       ...
       strResult = данные
       UpdateData(FALSE);
       обработка данных
       ...
       strResult = данные
       UpdateData(FALSE);
}


В принципе это касается не только CEdit. В общем нужно видить промежуточные результаты, а не только конечный.

Автор: vinter 13.3.2008, 13:35
обработка может быть слишком быстро проходит? и ты просто не замечаешь, что данные там менялись.

Автор: east 13.3.2008, 13:49
В том-то и дело, что времени хватает чтобы увидить изменения. Наблюдаю такой эфект, в окне редактирования текста не вижу, но полосы прокрутки меняют свой размер, как будто там есть текст.

Автор: east 13.3.2008, 18:02
Может не правильно вначале обьяснил, что хочу. Нужно сделать чтобы результат выводился по мере выполнения действий. Например, качается файл, а в CEdit или CStatic или ещё где всёравно, указывается сколько сколько скачалось.

Автор: vinter 13.3.2008, 18:56
где то с твоей стороны косяк, потому что это должно работать.

Цитата(east @  13.3.2008,  19:02 Найти цитируемый пост)
или CStatic

с CStatic нельзя переменные связывать.

покажи DDX и кусок кода где обновляется значение и вызывается UpdateData

Автор: east 13.3.2008, 19:44
Код

CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT_URL, m_strUrl);
    DDX_Text(pDX, IDC_EDIT_COD, m_dwCod);
    DDX_Text(pDX, IDC_EDIT_RESULT, m_strResult);
    DDX_Text(pDX, IDC_EDIT_PROXY, m_strProxy);
    DDX_Text(pDX, IDC_EDIT_PORT, m_nPort);

Код

if (m_strProxy.GetLength() == 0) Session.m_strProxy = "";
    else Session.m_strProxy = m_strProxy;
    Session.m_nPort = (INTERNET_PORT)m_nPort;
    if (Session.GetFile("conferenc.txt") > 0) return;
    m_strResult = Session.m_strText;
    m_dwCod = Session.m_dwCod;    
    UpdateData(FALSE);
    // Второй файл
    Session.GetFile("product.txt");
    m_strResult = Session.m_strText;
    m_dwCod = Session.m_dwCod;
    UpdateData(FALSE);
    // Третий файл
    Session.GetFile("work.txt");
    m_strResult = Session.m_strText;
    m_dwCod = Session.m_dwCod;
    UpdateData(FALSE);

показывае содержимое последнего файла, хотя, как я уже писал, полосы прокрутки меняют размер, но текста не видно

Автор: vinter 13.3.2008, 20:10
а может в обьекты пишуться символы конца строки, и поэтому такое? что у тебя там в переменных ты смотрел? посмотри содиржимое переменных в то время когда ты вычисляешь, тут видимо траблы с твоим файлом.

Автор: east 13.3.2008, 20:18
Пробовал третий файл коментировать, выдаёт содержимое второго.

Автор: korian 13.3.2008, 20:34
Цитата(east @  13.3.2008,  12:07 Найти цитируемый пост)
При использовании UpdateData(FALSE) появляется только последние данные

потому что пока обрабатывается одно сообщение (в данном случае WM_COMMAND), другое сообщение стоит в очереди, и не обрабатывается (в данном случае WM_PAINT для Editа)

Автор: east 13.3.2008, 20:42
И как сделать, чтобы видеть результат?

Автор: east 13.3.2008, 21:06
В принципе обдумав думаю уже справлюсь. Спасибо за ответы.

Добавлено через 2 минуты и 1 секунду
Если что не получиться, обращусь за помощью.

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