Всякий раз, когда ваша прикладная программа перерисовывает экран при обработке сообщения другого, чем WM_PAINT, она должна сделать каретку невидимой, используя функцию HideCaret. Когда ваша прикладная программа заканчивает прорисовку, она восстанавливает изображение каретки, используя функцию <&&local 18&&>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 несколько раз без вызова <&&local 18&&>ShowCaret, каретка не будет отображаться на экране до тех пор, пока прикладная программа также не вызовет функцию ShowCaret то же самое число раз.