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


Автор: REZiaMIX 22.2.2011, 13:51
Пишу под WinMobile 6.1(не суть). 
Есть такой кусок кода:
Код

void callToAnotherFunc()
{
     //  тут возникает необходимость - показать диалог
     //  следуя  здравому смыслу, хочу 
     //  убрать часики загрузки на время отображения диалога
     //  решаю юзать DoWaitCursor

     // ПРОБЛЕМНОЕ МЕСТО! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
     AfxGetApp()->DoWaitCursor(-1);     // по-идее убрали курсор загрузки
     someDlg.DoModal();
     AfxGetApp()->DoWaitCursor(1);      // возвратили курсор загрузки
   
}
void somefunction(someparams ....)
{
     // здесь мы чтото долго делаем, и просто обязаны сменить курсор на 'загрузка'
     // чтобы показать , что мы не зависли, а трудимся
     CWaitCursor aWait;
     if(некоеусловие)
          callToAnotherFunc();
}


Вся проблема в том, что на строке "// ПРОБЛЕМНОЕ МЕСТО"
одинарный вызов DoWaitCursor ни к чему не приводит!!! Т.е. курсор загрузки не пропадает!(пробовал аргумент -1 и 0)
но в тоже время, если сделать этот вызов 3 раза , все работает как надо - курсор исчезает. После этого, чтобы восстановить курсор загрузки, опять же, помогает только 3ной вызов DoWaitCursor. 

Меньшее кол-во вызовов не имеет никакого эффекта. В чем загвоздка?

Автор: Earnest 22.2.2011, 15:15
Как минимум, можно зайти внутрь функции DoWaitCursor и посмотреть, почему.
Но я бы твой код переписала более корректно с точки зрения блоков и времени жизни: т.е. первую часть, до if (некое условие) заключи в скобки, чтобы Wait-курсор сам разрушился. Если потом опять надо, никто не мешает еще раз включить.

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