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


Автор: maq 2.4.2009, 22:22
Есть ли аналог функции DoEvents (.NET) в MFC? Если какой-либо процесс занимает длительное время, то другие окна не перерисовываются, даже если я задаю Invalidate. Как решить это в MFC?

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

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

Автор: Alca 3.4.2009, 15:54
Код

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

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

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

попробую разобраться.

Автор: Alca 3.4.2009, 17:51
поиск -> _beginthreadex

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

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

А я чего-то подумал, что наоборот - не нужно рисовать другие окна, пока работает процесс. Прошу прощения за ненужный топик.

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