Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аналог DoEvents (.NET) в MFC 
:(
    Опции темы
maq
Дата 2.4.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



Есть ли аналог функции DoEvents (.NET) в MFC? Если какой-либо процесс занимает длительное время, то другие окна не перерисовываются, даже если я задаю Invalidate. Как решить это в MFC?
PM MAIL   Вверх
Albor
Дата 3.4.2009, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Наверное Hook на WM_PAINT. Иначе окна ,будут получать это сообщение. 

Это сообщение отредактировал(а) Albor - 3.4.2009, 06:27
PM MAIL ICQ   Вверх
Earnest
Дата 3.4.2009, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



1) Длительная обработка должна выполняться в потоке - это самое правильное решение.
2) Другой вариант - "разбавить" длительную обработку вставками PeekMessage - DispatchMessage. Но этот вариант хуже - фактически требует повторения главного цикла, а там ведь не только DispatchMessage. Но если ограничиться выполнением WM_PAINT - то вполне можно.


--------------------
...
PM   Вверх
Alca
Дата 3.4.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



Код

void vDoEvents() {
    MSG msg;    memset(&msg, 0, sizeof(msg));
    while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}



--------------------
PM WWW ICQ Skype Jabber   Вверх
maq
Дата 3.4.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



Earnest
У меня такой случай. Долго открывается документ. И пока он открывается выскакивает окно с текстом «пожалуйста, подождите». Так вот этот текст не прорисовывается (в клиентской части).
Что значит «выполняться в потоке»? И как это сделать технически?

Alca
Код
void vDoEvents() {
    MSG msg;    memset(&msg, 0, sizeof(msg));
    while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

попробую разобраться.
PM MAIL   Вверх
Alca
Дата 3.4.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



поиск -> _beginthreadex

Добавлено через 1 минуту и 55 секунд
примерчик

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  UITHREAD.zip 20,09 Kb


--------------------
PM WWW ICQ Skype Jabber   Вверх
Albor
Дата 3.4.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(Albor @  3.4.2009,  05:24 Найти цитируемый пост)
Наверное Hook на WM_PAINT. Иначе окна ,будут получать это сообщение. 

А я чего-то подумал, что наоборот - не нужно рисовать другие окна, пока работает процесс. Прошу прощения за ненужный топик.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0812 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.