Показ курсора на экране


Система автоматически показывает на экране курсор класса (курсор, связанный с окном, в котором он является указателем). Вы можете назначить курсор класса, в то время, когда регистрируется класс окна. Пример ниже иллюстрирует это, назначая дескриптор курсора члену hCursor структуры WNDCLASS, идентифицированной параметром wc.

Демонстрационный пример

WNDCLASS  wc; 
 
// Заполним поля структуры класса окна параметрами, которые
// описаны в главном окне. 
 
wc.style = NULL;                        // стиль(и)класса
wc.lpfnWndProc = (WNDPROC) MainWndProc; // оконная процедура
wc.cbClsExtra = 0;           // доп. данных для класса нет 
wc.cbWndExtra = 0;           // доп. данных для окна нет
wc.hInstance = hinst;        // программа-владелец класса 
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);     // значок класса 
wc.hCursor = LoadCursor(hinst, MAKEINTRESOURCE(230)); // курсор класса 
wc.hbrBackground = GetStockObject(WHITE_BRUSH); // фон класса 
wc.lpszMenuName =  "GenericMenu";               // меню класса 
wc.lpszClassName = "GenericWClass"              // имя класса 
 
// Регистрация класса окна. 
 
return RegisterClass(&wc); 

Когда класс окна регистрируется, курсор, идентифицированный как 230 в файле определения ресурса приложения - это заданный по умолчанию курсор для всех окон, основанных на этом классе.

Ваше приложение может изменить исполнение курсора, используя функцию SetCursor и определяя другой дескриптор курсора. Однако, когда курсор перемещается, система в новом месте снова рисует курсор класса. Чтобы воспрепятствовать восстановлению курсора класса, Вы должны обработать сообщение WM_SETCURSOR. Каждый раз, когда курсора перемещается, а ввод данных от мыши не перехватывается, система отправляет это сообщение окну в котором, курсор передвигается.

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

case WM_SETCURSOR: 
 
    // Если окно свернуто, рисуется курсор hCurs3. 
    // Если окно не свернуто, рисуется курсор по 
    // умолчанию (курсор класса). 
 
    if (IsIconic(hwnd)) 
    { 
        SetCursor(hCurs3); 
        break; 
    } 

Когда окно не свернуто, система показывает на экране курсор класса.

Вы можете заменить курсор класса, используя функцию SetClassLong. Эта функция заменяет заданные по умолчанию назначения окна для всех окон указанного класса. Пример ниже заменяет существующий курсор класса курсором hCurs2.

// Заменяет курсор класса окна курсором, представленным 
// параметром hwnd. 
 
SetClassLong(hwnd,    // дескриптор окна
    GCL_HCURSOR,      // заменяемый курсор 
    (LONG) hCurs2);   // новый курсор 

Для получения дополнительной информации, см. главы Классы окна и Ввод данных от мыши.

Назад в оглавление
На главную страницу

Hosted by uCoz