Задание изображения курсора

Курсор — это небольшое изображение, показывающее расположение мыши или другого указывающего устройства. Многие приложения изменяют изображение курсора, чтобы оставить отзыв пользователю. Хотя это и не требуется, он добавляет в ваше приложение немного лака.

Windows предоставляет набор стандартных изображений курсоров, называемых системными курсорами. К ним относятся стрелка, рука, I-луч, песочные часы (которые в настоящее время вращаются) и другие. В этом разделе описывается использование системных курсоров. Дополнительные сведения о более сложных задачах, таких как создание пользовательских курсоров, см. в разделе Курсоры.

Вы можете связать курсор с классом окна, задав элемент hCursor структуры WNDCLASS или WNDCLASSEX . В противном случае курсором по умолчанию является стрелка. При наведении указателя мыши на окно окно получает WM_SETCURSOR сообщение (если другое окно не захватило мышь). На этом этапе происходит одно из следующих событий:

  • Приложение устанавливает курсор, и процедура окна возвращает значение TRUE.
  • Приложение ничего не делает и передает WM_SETCURSORв DefWindowProc.

Чтобы задать курсор, программа выполняет следующие действия:

  1. Вызывает LoadCursor для загрузки курсора в память. Эта функция возвращает дескриптор курсору.
  2. Вызывает SetCursor и передает дескриптор курсора.

В противном случае, если приложение передает WM_SETCURSORв DefWindowProc, функция DefWindowProc использует следующий алгоритм для установки изображения курсора:

  1. Если окно имеет родительский элемент, переадресуйте сообщение WM_SETCURSOR родительскому объекту для обработки.
  2. В противном случае, если в окне есть курсор класса, установите курсор класса.
  3. Если курсор класса отсутствует, установите курсор со стрелкой.

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

    LPCTSTR cursor = IDC_HAND;
    hCursor = LoadCursor(NULL, cursor);
    SetCursor(hCursor);

При изменении курсора изображение курсора сбрасывается при следующем перемещении мыши, если вы не перехватите сообщение WM_SETCURSOR и не установите курсор снова. В следующем коде показано, как обрабатывать WM_SETCURSOR.

    case WM_SETCURSOR:
        if (LOWORD(lParam) == HTCLIENT)
        {
            SetCursor(hCursor);
            return TRUE;
        }
        break;

Этот код сначала проверяет нижние 16 бит lParam. Если LOWORD(lParam) равно HTCLIENT, это означает, что курсор находится над клиентской областью окна. В противном случае курсор находится над неклиентской областью. Как правило, курсор следует устанавливать только для клиентской области и разрешить Windows устанавливать курсор для неклиентской области.

Следующая

Входные данные пользователя: расширенный пример