WinPro logo. Перейти на сайт www.winpro.narod.ru

Пример отображения курсора



Курсор оконного класса система отображает автоматически при его прохождении над одним из окон этого класса. Назначить курсор для класса можно при регистрации оконного класса. В этом примере члену hCursor структуры wc типа WNDCLASS присваивается описатель курсора.
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 можно в разных ситуациях менять внешний вид курсора над окном. В следующем примере показано как отображать курсор с описателем hCurs3 при каждом прохождении курсора над пиктограммой минимизированного приложения.

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

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

// Установка нового курсора для оконного класса через одно из его окон с описателем hwnd
 
SetClassLong(hwnd,    // описатель окна
    GCL_HCURSOR,      // сменить курсор
    (LONG) hCurs2);   // новый курсор
Hosted by uCoz