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

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

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 может загружать настраиваемый курсор из ресурса или один из системных курсоров. В следующем примере показано, как установить курсор на системный курсор руки.

    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 задать курсор для неклиентной области.

Следующая

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