Win32 API. Каретки

ОГЛАВЛЕНИЕ

Каретка - мерцающая линия, блок или точечный рисунок в рабочей области окна. Каретка обычно указывает место, куда будет вставлен текст или графика. Следующая иллюстрация показывает некоторые общие вариации в изображении каретки. Поскольку только одно окно одновременно может иметь фокус клавиатуры или быть активным, имеется только одна каретка в системе. Вообще, каждое окно, которое принимает ввод с клавиатуры, должно создать каретку, когда оно принимает фокус клавиатуры и уничтожать каретку, когда оно теряет фокус клавиатуры.  Прикладная программа, написанная для Microsoft Windows может создавать каретку, показывать или скрывать её, перемещать каретку и изменять частоту мерцания.

О каретках

Прикладная программа использует функцию CreateCaret, чтобы установить параметры для каретки. Windows формирует каретку, инвертируя цвет пикселя внутри прямоугольника, определяемого позицией каретки, шириной и высотой. Ширина и высота устанавливаются в логических единицах измерения; следовательно, вид каретки подчинен режиму отображения окна.

После того, как каретка определена, прикладная программа использует функцию ShowCaret, чтобы сделать каретку видимой. Когда каретка появляется, она автоматически начинает мерцать. Чтобы показывать плотную каретку, Windows инвертирует каждый пиксель в прямоугольнике; чтобы показывать серую каретку, Windows инвертирует каждый второй пиксель; чтобы показывать растровую каретку, Windows инвертирует только белые биты точечного рисунка.

Прошедшее время, в миллисекундах, требуемых, чтобы инвертировать каретку называется частотой мерцания (blink time). Пользователь может устанавливать частоту мерцания каретки, используя Панель Управления, а прикладные программы должны соблюдать параметры настройки, которые выбрал пользователь. Прикладная программа может определять частоту мерцания каретки, используя функцию GetCaretBlinkTime. Если Вы пишите прикладную программу, которая позволяет пользователю корректировать частоту мерцания, типа апплета Панели Управления, используйте функцию SetCaretBlinkTime, чтобы установить скорость частоты мерцания путем установки числа миллисекунд. Период мерцания (flash time) - затраченное время, в миллисекундах, требуемое, чтобы показать, инвертировать и восстановить изображение каретки. Время мерцания каретки - вдвое больше, чем частота мерцания.

Прикладная программа может определять позицию каретки, используя функцию GetCaretPos. Позиция, в рабочих координатах, копируется в структуру POINT, определяемую параметром в GetCaretPos. Прикладная программа может перемещать каретку в окно, используя функцию SetCaretPos. Окно может перемещать каретку только тогда, если оно уже обладает кареткой. SetCaretPos может перемещать каретку не зависимо от того, является ли она видимой или нет. 


 

Удаление каретки

Прикладная программа может использовать функцию HideCaret, чтобы удалить каретку с экрана. Это полезно, когда ваша прикладная программа должна перерисовать экран при обработке сообщения, но должна сохранить каретку вне этой области. Когда прикладная программа заканчивает прорисовку окна, она может показывать каретку снова, используя функцию ShowCaret. Сокрытие каретки не разрушает её форму и не аннулирует точку ввода. Сокрытие каретки - это совокупность действий; то есть, если прикладная программа вызывала HideCaret пять раз, она должна также вызвать ShowCaret пять раз прежде, чем каретка появится вновь.

Прикладная программа может удалять каретку с экрана и уничтожать форму, используя функцию DestroyCaret. DestroyCaret уничтожает каретку только тогда, если окно, включаемое в текущей задаче обладает кареткой(Примеч. переводчика: сразу двух кареток на экране не должно быть! Это чревато зависанием системы).

 

Создание и отображение каретки

После приема фокуса клавиатуры, окно должно создать и показывать каретку. Используйте функцию CreateCaret, чтобы создать каретку в данном окне. Вы можете затем вызывать SetCaretPos, чтобы установить текущую позицию каретки и ShowCaret, чтобы сделать каретку видимой.

Система посылает сообщение WM_SETFOCUS окну, принимающему фокус клавиатуры; следовательно, прикладная программа должна создать и показывать каретку при обработке этого сообщения.

HWND hwnd,       // дескриптор окна
int x; // горизонтальная координата каретки
int y; // вертикальная координата каретки
int nWidth; // ширина каретки
int nHeight; // высота каретки
char *lpszChar; // указатель на символ

case WM_SETFOCUS:

// Создаем плотную черную каретку.
CreateCaret(hwnd, (HBITMAP) NULL, nWidth, nHeight);
// Регулировка позиции каретки, в рабочих координатах.
SetCaretPos(x, y);
// Отображаем каретку.
ShowCaret(hwnd);
break;

Чтобы создать каретку, основанную на точечном рисунке, Вы должны определить дескриптор растрового изображения, когда используете функцию CreateCaret. Вы можете использовать прикладную программу работы с графикой, чтобы создать точечный рисунок и оттранслировать ресурс, чтобы добавить точечный рисунок к ресурсам вашей прикладной программы. Ваша прикладная программа может затем использовать функцию LoadBitmap, чтобы загрузить дескриптор точечного рисунка. Например, Вы можете заменить в предшествующем примере строку CreateCaret, чтобы создать растровую каретку, следующими строками.

// Загрузка определенного программой ресурса каретки.
hCaret = LoadBitmap(hinst, MAKEINTRESOURCE(120));
// Создание точечного рисунка каретки.
CreateCaret(hwnd, hCaret, 0, 0);

Альтернативно, Вы можете использовать функцию CreateCaret или CreateDIBitmap, чтобы возвратить дескриптор точечного рисунка каретки. Для получения дополнительной информации о точечных рисунках, см. Точечные рисунки.

Если ваша прикладная программа определяет дескриптор точечного рисунка, CreateCaret игнорирует параметры высоты и ширины. Точечный рисунок определяет размер каретки.

 

Сокрытие каретки

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

Следующий пример кода показывает, как вашей прикладной программе скрыть каретку при прорисовке символа на экране и при обработке сообщения WM_CHAR.

HWND hwnd,   // дескриптор окна
HDC hdc; // контекст устройства

case WM_CHAR:
switch (wParam)
{
case 0x08:
// Обработка клавиши "Backspace"
break;
case 0x09:
// Обработка табуляции
break;
case 0x0D:
// Обработка возврата каретки
break;
case 0x1B:
// Обработка клавиши "Esc"
break;
case 0x0A:
// Обработка перевода строки
break;
default:
// Сокрытие каретки
HideCaret(hwnd);
// Прорисовка символа на экране
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
TextOut(hdc, x, y, lpszChar, 1);
ReleaseDC(hwnd, hdc);
// Изображение каретки
ShowCaret(hwnd);
}

Если ваша прикладная программа вызывает функцию HideCaret несколько раз без вызова ShowCaret, каретка не будет отображаться на экране до тех пор, пока прикладная программа также не вызовет функцию ShowCaret то же самое число раз.


Уничтожение каретки

Когда окно теряет фокус клавиатуры, система посылает окну сообщение WM_KILLFOCUS. Ваша прикладная программа должна уничтожить каретку при обработке этого сообщения, используя функцию DestroyCaret. Следующий код показывает, как уничтожить каретку в окне, которая больше не имеет фокуса клавиатуры.

case WM_KILLFOCUS:
// Окно теряет фокус клавиатуры, так что уничтожьте каретку
DestroyCaret();
break;


Регулировка частоты мерцания

В Windows 3.x, базирующаяся на Windows 16-разрядная прикладная программа может вызывать функцию GetCaretBlinkTime, чтобы сохранить текущую частоту мерцания, затем вызвать функцию SetCaretBlinkTime, чтобы откорректировать частоту мерцания в ходе обработки сообщения WM_SETFOCUS. Прикладная программа восстанавливает сохраненную частоту мерцания для использования другими прикладными программами, вызывая SetCaretBlinkTime в ходе обработки сообщения WM_KILLFOCUS. Однако эта методика не работает в среде Windows NT и Windows 95, потому что они - устойчивые, многопоточные среды. А именно, деактивизация одной из прикладных программ не синхронизирована с активизацией другой прикладной программы, так что, если одна прикладная программа зависла, другая прикладная программа может быть все еще активной.

Базирующиеся на Win32 прикладные программы должны соблюдать частоту мерцания, выбранную пользователем. Функция SetCaretBlinkTime должна вызываться лишь той прикладной программой, которой пользователь позволяет установку частоты мерцания.

 

Обработка вводимой информации из клавиатуры

Следующий пример показывает, как использовать каретку в обычном редакторе текста. Пример модифицирует позицию каретки, поскольку пользователь вводит с клавиатуры печатные символы и использует различные клавиши, чтобы двигаться по рабочей области.

#define TEXTMATRIX(x, y) *(pTextMatrix + (y * nWindowCharsX) + x)  
// Глобальные переменные
HINSTANCE hinst; // текущий экземпляр программы
HBITMAP hCaret; // точечный рисунок каретки
HDC hdc; // контекст устройства
PAINTSTRUCT ps; // информация о прорисовке рабочей области
static char *pTextMatrix = NULL; // указатель на текстовую матрицу
static int
nCharX, // ширина символа в логических единицах
nCharY, // высота символа в логических единицах
nWindowX, // ширина рабочей области
nWindowY, // высота рабочей области
nWindowCharsX, // ширина рабочей области для символа
nWindowCharsY, // высота рабочей области для символа
nCaretPosX, // x-координата каретки
nCaretPosY; // y-координата каретки
static UINT uOldBlink; // предыдущая частота мерцания
int x, y; // x и y координаты, используемые в текстовой матрице
TEXTMETRIC tm; // информация о фонте

LONG APIENTRY MainWndProc(
HWND hwnd, // дескриптор окна
UINT message, // тип сообщения
UINT wParam, // дополнительная информация
LONG lParam) // дополнительная информация
{
switch (message)
{
case WM_CREATE:
// Выбор фиксированной ширины системного фонта и получение его текстовой матрицы.
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
GetTextMetrics(hdc, &tm);
ReleaseDC(hwnd, hdc);
// Сохранение средней высоты и ширины символов.
nCharX = tm.tmAveCharWidth;
nCharY = tm.tmHeight;
return 0;
case WM_SIZE:
// Определение ширины рабочей области, в пикселях и в количестве символов.
nWindowX = LOWORD(lParam);
nWindowCharsX = max(1, nWindowX/nCharX);
// Определение высоты рабочей области, в пикселях и в количестве символов.
nWindowY = HIWORD(lParam);
nWindowCharsY = max(1, nWindowY/nCharY);
// Очистка буфера, который содержит введенный текст.
if (pTextMatrix != NULL)
free(pTextMatrix);
// Если имеется достаточно памяти, распределите пространство для буфера ввода текста.
pTextMatrix = malloc(nWindowCharsX * nWindowCharsY);
if (pTextMatrix == NULL)
ErrorHandler("Not enough memory.");
else
for (y = 0; y < nWindowCharsY; y++)
for (x = 0; x < nWindowCharsX; x++)
TEXTMATRIX(x, y) = ' ';
// Переместим каретку в начало координат
SetCaretPos(0, 0);
return 0;
case WM_KEYDOWN:
switch (wParam)
{
case VK_HOME: // в начало
nCaretPosX = 0;
break;
case VK_END: // в конец
nCaretPosX = nWindowCharsX - 1;
break;
case VK_PRIOR: // предыдущая страница
nCaretPosY = 0;
break;
case VK_NEXT: // следующая страница
nCaretPosY = nWindowCharsY -1;
break;
case VK_LEFT: // перемещение стрелкой влево
nCaretPosX = max(nCaretPosX - 1, 0);
break;
case VK_RIGHT: // перемещение стрелкой вправо
nCaretPosX = min(nCaretPosX + 1,
nWindowCharsX - 1);
break;
case VK_UP: // перемещение стрелкой вверх
nCaretPosY = max(nCaretPosY - 1, 0);
break;
case VK_DOWN: // перемещение стрелкой вниз
nCaretPosY = min(nCaretPosY + 1,
nWindowCharsY - 1);
break;
case VK_DELETE: // удалить
// Переместите все символы, которые следовали за удаленным символом (на той же самой строке) на один
// пробел обратно (влево) в матрице

for (x = nCaretPosX; x < nWindowCharsX; x++)
TEXTMATRIX(x, nCaretPosY) = TEXTMATRIX(x + 1, nCaretPosY);
// Замена последнего символа в строке с пробелом.
TEXTMATRIX(nWindowCharsX - 1,
nCaretPosY) = ' ';
// Прикладная программа будет рисовать вне обработки сообщения
// WM_PAINT, так скрывают каретку.

HideCaret(hwnd);
// Перерисовка строки для удаленного символа.
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
TextOut(hdc, nCaretPosX * nCharX,
nCaretPosY * nCharY,
&TEXTMATRIX(nCaretPosX, nCaretPosY),
nWindowCharsX - nCaretPosX);
ReleaseDC(hwnd, hdc);
// Показать каретку.
ShowCaret(hwnd);
break;
}
// Корректировать позицию каретки, основанную при обработке виртуальной клавиши
SetCaretPos(nCaretPosX * nCharX, nCaretPosY * nCharY);
return 0;
case WM_CHAR:
switch (wParam)
{
case 0x08: // Обратный Пробел (Back Space)
// Перемещение каретки на один пробел, а затем обработка этого действия подобно клавише DEL.
if (nCaretPosX > 0)
{
nCaretPosX--;
SendMessage(hwnd, WM_KEYDOWN, VK_DELETE, 1L);
}
break;
case 0x09: // табуляция (Tab)
// Табуляция останавливается, проходя каждые четыре пробела, таким образом добавляются пробелы,
// до тех пор, пока пользователь нажимает следующий раз на клавишу табуляции.

do
{
SendMessage(hwnd, WM_CHAR, ' ', 1L);
} while (nCaretPosX % 4 != 0);
break;

case 0x0D: // возврат каретки
// Переход к началу следующей строки. Нижняя строка переносится по кругу в верхнюю часть.
nCaretPosX = 0;
if (++nCaretPosY == nWindowCharsY)
nCaretPosY = 0;
break;

case 0x1B: // Escape
case 0x0A: // перевод строки
MessageBeep((UINT) -1);
break;
default:
// Добавление символа в буфер текста.
TEXTMATRIX(nCaretPosX, nCaretPosY) = (char) wParam;
// Прикладная программа будет рисовать вне обработки сообщения WM_PAINT; так скрывают каретку.
HideCaret(hwnd);
// Прорисовка символа на экране
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
TextOut(hdc, nCaretPosX * nCharX,
nCaretPosY * nCharY,
&TEXTMATRIX(nCaretPosX, nCaretPosY), 1);
ReleaseDC(hwnd, hdc);
// Отобразим каретку
ShowCaret(hwnd);
// Подготовка переноса по словам с начала до конца, если Вы достигли конца строки
if (++nCaretPosX == nWindowCharsX)
{
nCaretPosX = 0;
if (++nCaretPosY == nWindowCharsY)
nCaretPosY = 0;
}
break;
}
// Регулировка позиции каретки, основанной на обработке символа.
SetCaretPos(nCaretPosX * nCharX, nCaretPosY * nCharY);
return 0;

case WM_PAINT:
// Прорисовка всех символов в буфере, строка за строкой.

hdc = BeginPaint(hwnd, &ps);
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
for (y = 0; y < nWindowCharsY; y++)
TextOut(hdc, 0, y * nCharY, &TEXTMATRIX(0, y), nWindowCharsX);
EndPaint(hwnd, &ps);
case WM_SETFOCUS:
// Окно имеет фокус ввода. Загрузка каретки определенной ресурсом программного приложения.
hCaret = LoadBitmap(hinst, MAKEINTRESOURCE(120));
// Создание каретки
CreateCaret(hwnd, hCaret, 0, 0);
// Регулировка позиции каретки
SetCaretPos(nCaretPosX * nCharX, nCaretPosY * nCharY);
// Изображение каретки.
ShowCaret(hwnd);
break;
case WM_KILLFOCUS:
// Окно теряет фокус ввода, так что каретка уничтожается.
DestroyCaret();
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return NULL;
}


Функция CreateCaret

(СоздатьКаретку)

Функция CreateCaret создает новую форму для каретки системы и присваивает монопольное использование каретки заданному окну. Форма каретки может быть строка, блок, или точечный рисунок.

Синтаксис

BOOL CreateCaret
(
HWND hWnd, // дескриптор окна владельца каретки
HBITMAP hBitmap, // дескриптор точечного рисунка для формы каретки
int nWidth, // ширина каретки
int nHeight // высота каретки
);

Параметры
hWnd
Идентифицирует окно, которое обладает кареткой.
hBitmap
Идентифицирует точечный рисунок, который определяет форму каретки. Если этот параметр - НОЛЬ (NULL), каретка объемная. Если этот параметр - (HBITMAP) 1, каретка серая. Если этот параметр - дескриптор точечного рисунка, каретка - определяется точечным рисунком. Дескриптор точечного рисунка, должен быть создан функцией CreateBitmap, CreateDIBitmap, или LoadBitmap. Если hBitmap - дескриптор точечного рисунка, CreateCaret игнорирует параметры nWidth и nHeight; точечный рисунок сам определяет собственную ширину и высоту.
nWidth
Устанавливает ширину каретки в логических единицах измерения. Если этот параметр нулевой, ширина устанавливается шириной границы определенного системой окна. Если hBitmap - дескриптор точечного рисунка, CreateCaret игнорирует этот параметр.
nHeight
Устанавливает высоту, в логических единицах измерения, каретки. Если этот параметр нулевой, высота устанавливается высотой границы определенной системой окна. Если hBitmap - дескриптор точечного рисунка, CreateCaret игнорирует этот параметр.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Параметры nWidth и nHeight устанавливают ширину и высоту каретки, в логических единицах измерения; точная ширина и высота, в пикселях, зависят от режима отображения окна.
CreateCaret автоматически уничтожает предыдущую форму каретки, если таковая имеется, независимо от окна, которое обладает кареткой. Каретка скрыта до вызова из прикладной программы функцией ShowCaret, которая делает каретку видимой.
Каретка - общедоступный ресурс; имеется только одна каретка в системе. Окно должно создать каретку только тогда, когда оно имеет фокус клавиатуры или активно. Окно должно уничтожить каретку перед потерей фокуса клавиатуры или перед потерей активности.
Вы можете возвратить ширину или высоту границы окна системы, используя функцию GetSystemMetrics, определяя значения флажков SM_CXBORDER и SM_CYBORDER. Использование ширины или высоты границы окна гарантирует, что каретка будет видима на экране с высокой разрешающей способностью.

Смотри также
CreateBitmap, CreateDIBitmap, DestroyCaret, GetSystemMetrics, HideCaret, LoadBitmap, ShowCaret

Размещение и совместимость CreateCaret

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция DestroyCaret

(РазрушитьКаретку)

Функция DestroyCaret уничтожает текущую форму каретки, освобождает каретку от окна и удаляет каретку с экрана. Если форма каретки основана на точечном рисунке, DestroyCaret не освобождает точечный рисунок.

Синтаксис

BOOL DestroyCaret(VOID)

Параметры
У этой функции нет параметров.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Функция DestroyCaret уничтожает каретку только тогда, если окно в текущей задаче обладает кареткой. Если окно, которое не в текущей задаче, обладает кареткой, DestroyCaret не делает ничего и возвращает значение ЛОЖЬ (FALSE). Каретка - общедоступный ресурс; в системе имеется только одна каретка. Окно должно создавать каретку только тогда, когда оно имеет фокус клавиатуры или активно. Окно должно уничтожить каретку перед потерей фокуса клавиатуры или переходом в режим не активного.

Смотри также
CreateCaret, HideCaret, ShowCaret

Размещение и совместимость DestroyCaret

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция GetCaretBlinkTime

Функция GetCaretBlinkTime возвращает прошедшее время, в миллисекундах, требуемых, чтобы инвертировать пиксели каретки. Пользователь может устанавливать это значение, используя Панель Управления.

Синтаксис

UINT GetCaretBlinkTime(VOID)

Параметры
У этой функции нет параметров.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - частота мерцания, в миллисекундах. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получать расширенные данные об ошибках, вызовите GetLastError.

Смотри также
SetCaretBlinkTime

Размещение и совместимость GetCaretBlinkTime

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция GetCaretPos

(ПолучитьПозициюКаретки)

Функция GetCaretPos копирует позицию каретки, в рабочих координатах, в определяемой структуре POINT.

Синтаксис

 
BOOL GetCaretPos
(
LPPOINT lpPoint // адрес структуры, которая принимает координаты
);

Параметры
lpPoint
Указывает на структуру POINT, которая принимает рабочие координаты каретки.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Позиция каретки всегда дана в рабочих координатах окна, которое содержит каретку.

Смотри также
SetCaretPos, POINT

Размещение и совместимость GetCaretPos

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция HideCaret

(СкрытьКаретку)

Функция HideCaret удаляет каретку с экрана. Сокрытие каретки не уничтожает её текущую форму и не считает не состоявшейся вставку указателя.

Синтаксис

BOOL HideCaret
(
HWND hWnd // дескриптор окна с кареткой
);

Параметры
hWnd
Идентифицирует окно, которое обладает кареткой. Если этот параметр - НОЛЬ (NULL), HideCaret ищет текущую задачу для окна, которое обладает кареткой.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Функция HideCaret скрывает каретку только в том случае, если заданное окно обладает кареткой. Если заданное окно не обладает кареткой, HideCaret не делает ничего и возвращает значение ЛОЖЬ (FALSE). Сокрытие накапливается. Если ваша прикладная программа вызвала HideCaret пять раз подряд, она должна также вызвать ShowCaret пять раз прежде, чем каретка отобразится на экране.

Размещение и совместимость HideCaret

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция SetCaretBlinkTime

(УстановкаЧастотыМерцания)

Функция SetCaretBlinkTime устанавливает частоту мерцания каретки по установленному числу миллисекунд. Частота мерцания - прошедшее время, в миллисекундах, требуемых, чтобы инвертировать пиксели каретки.

Синтаксис

BOOL SetCaretBlinkTime
(
UINT uMSeconds // частота мерцания, в миллисекундах
);

Параметры
uMSeconds
Устанавливает новую частоту мерцания, в миллисекундах.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Пользователь может устанавливать частоту мерцания, используя Панель Управления. Прикладные программы должны соблюдать установки, которые выбрал пользователь. Функция SetCaretBlinkTime должна использоваться только той прикладной программой, которая позволяет пользователю устанавливать частоту мерцания, типа приложения Панели Управления.
Если Вы изменяете частоту мерцания, то впоследствии активизированные прикладные программы используют измененную частоту мерцания, даже если Вы восстанавливаете предыдущую частоту мерцания, когда теряете фокус клавиатуры или становитесь неактивными. Это особенность многопоточной среды, где деактивизация вашей прикладной программы не синхронизирована с активизацией другой прикладной программы. Это свойство позволяет системе активизировать другую прикладную программу, даже если текущая прикладная программа зависла.

Размещение и совместимость SetCaretBlinkTime

Windows NT			Да
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется


Функция SetCaretPos

(УстановитьПозициюКаретки)

Функция SetCaretPos перемещает каретку в заданные координаты. Если окно, которое обладает кареткой, было создано со стилем класса CS_OWNDC, то определяемые координаты подчинены режиму отображения контекста устройства, связанного с этим окном.

Синтаксис

BOOL SetCaretPos
(
int X, // позиция по горизонтали
int Y // позиция по вертикали
);

Параметры
X
Устанавливает новую x-координату каретки.
Y
Устанавливает новую y-координату каретки.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Функция SetCaretPos перемещает каретку, независимо от того скрыта каретка или нет. Каретка - общедоступный ресурс; имеется только одна каретка в системе. Окно может устанавливать позицию каретки только тогда, если оно обладает кареткой.

Размещение и совместимость SetCaretPos

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется

 

Функция ShowCaret

(ПоказатьКаретку)

Функция ShowCaret делает каретку видимой на экране в текущей позиции каретки. Когда каретка становится видимой, она начинает автоматически мерцать.

Синтаксис

 
BOOL ShowCaret
(
HWND hWnd // дескриптор окна с кареткой
);

Параметры
hWnd
Идентифицирует окно, которое обладает кареткой. Если этот параметр - НОЛЬ (NULL), ShowCaret ищет текущую задачу окна, которая обладает кареткой.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение отлично от нуля. Если функция потерпит неудачу, возвращаемое значение нулевое. Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
ShowCaret показывает каретку только в том случае, если определяемое окно обладает кареткой, каретка имеет форму и не была скрыта два или больше раз подряд. Если одно или большее количество из этих условий не выполнено, ShowCaret не делает ничего и возвращает значение ЛОЖЬ (FALSE).
Сокрытие накапливается. Если ваша прикладная программа обратились к функции HideCaret пять раз подряд, она должна также обратиться к ShowCaret пять раз прежде, чем каретка появится вновь.
Каретка - общедоступный ресурс; имеется только одна каретка в системе. Окно должно показать каретку только тогда, когда окно имеет фокус клавиатуры или активно.

Размещение и совместимость ShowCaret

Windows NT			Да 
Win95 Да
Win32s Да
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется