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


Автор: Evgeny84 27.6.2007, 18:13
Как правильно использовать SetCursor()?
MFC SDI приложение.
При использовании SetCursor(LoadCursor(NULL,IDC_WAIT)) курсор меняется на песочные часы на доли сек, а затем возвращается к стрелке. В MSDN написанно, что если курсор класса приложения не NULL, то при движении мыши курсор восстанавливается.
Цитата

If your application must set the cursor while it is in a window, make sure the class cursor for the specified window's class is set to NULL. If the class cursor is not NULL, the system restores the class cursor each time the mouse is moved. 

Тогда как обнулить курсор, если создание класса приложения скрыто за структурой SDI?

Автор: zkv 28.6.2007, 02:01
Цитата(Evgeny84 @  27.6.2007,  18:13 Найти цитируемый пост)
Как правильно использовать SetCursor()?

обрабатывай WM_SETCURSOR, суть такая:
Код

BOOL CMyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
    if( m_fIsWaitCur )//некоторое условие, при котором 
    {
        HCURSOR hCur = AfxGetApp()->LoadStandardCursor( IDC_WAIT );
        SetCursor( hCur );
        return TRUE;
    }

    return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

Цитата(Evgeny84 @  27.6.2007,  18:13 Найти цитируемый пост)
Тогда как обнулить курсор

примерно так: (в общепознавательных целях, не рекомендую использовать)
Код

    ::SetClassLong(GetSafeHwnd(), GCL_HCURSOR, NULL );

таким же образом, можно нагло подсунуть свой курсор :
Код

    HCURSOR hCur = AfxGetApp()->LoadStandardCursor( IDC_WAIT );
    ::SetClassLong(GetSafeHwnd(), GCL_HCURSOR, hCur );

только возвращать обратно тоже самому придется smile

Автор: Evgeny84 28.6.2007, 05:38
Спасибо!!! 

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