Всякий раз, когда ваше приложение перерисовывает экран при обработке другого сообщения, а не WM_PAINT, оно должно сделать каретку невидимой при помощи использования функции HideCaret. Когда ваше приложение завершает рисование, оно восстанавливает изображение каретки при помощи использования функции ShowCaret. Если ваша прикладная программа обрабатывает сообщение WM_PAINT, вам не нужно скрывать и восстанавливать изображение каретки, потому что эта функция делает это автоматически.
Пример кода ниже показывает, как ваше приложение, скрывает каретку при рисовании символа на экране и при обработке сообщения WM_CHAR .
Демострационный пример
HWND hwnd, // дескриптор окна HDC hdc; // контекст устройства case WM_CHAR: switch (wParam) { case 0x08: // Обработка возврата на один символ. break; case 0x09: // Обработка табуляции. break; case 0x0D: // Обработка возврата каретки. break; case 0x1B: // Обработка перехода. 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 .