5.10.2 - Отображение курсора

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

WNDCLASS  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 и определяя дескриптор другого курсора. Однако, когда курсор перемещается, Windows в новом месте снова рисует курсор класса. Чтобы предотвратить повторный вывод курсора класса, вы должны обрабатывать сообщение WM_SETCURSOR. Каждый раз, когда курсор перемещается, а ввод информации от мыши не захвачен, Windows посылает это сообщению окну, в котором перемещается курсор.

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

case WM_SETCURSOR:

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

Когда окно не свернуто, Windows отображает курсор класса.

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

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

За более подробной информацией, обратитесь к статьям Классы окна и Информация вводимая от Мыши.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков.