Изменить курсор на продолжительность потока - PullRequest
2 голосов
/ 16 июня 2011

В приложении MFC я хочу показать курсор ожидания (песочные часы) в течение всего времени работы потока, но при вызове

SetCursor(LoadCursor(NULL, IDC_WAIT));

из статической функции-члена ThreadProc нетэффект.Любая помощь?

Спасибо, RSel

Редактировать

Разобрался.Это один из способов сделать это:

Вызвать LoadCursor в конструкторе:

m_cursor = LoadCursor(NULL, IDC_WAIT);

Вызвать SetCursor прямо перед AfxBeginThread:

SetCursor(m_cursor);
AfxBeginThread( ... );

Перезаписать OnSetCursor, чтобы предотвратить курсорот преждевременного перехода назад:

CMyView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{   
    if (m_thread_is_running)
    {
        return false;
    }
    else
    {
        return CView::OnSetCursor(pWnd, nHitTest, message);
    }
}

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Я не проверял, но я думаю, что курсор обновляется каждый раз, когда движется мышь. Поэтому вы должны либо вызывать SetCursor () каждый раз, когда получаете сообщение WM_SETCURSOR, либо менять курсор по умолчанию. Обратите внимание, что вам не следует вызывать LoadCursor () каждый раз, когда вы устанавливаете курсор.

Курсор по умолчанию установлен в WNDCLASS структуре окна.

Подробнее см. WM_SETCURSOR .

0 голосов
/ 16 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...