Text Caret

Caret is a blinking cursor in a window. It displays the current position of the cursor where the input is getting added from user. A textbox or text area control automatically displayes caret. It is the builtin property of the windon. However a custom window application which displayes logs, terminal or console output etc can use caret. Win32 APIs are available to create, distroy, show, hide, set position etc.

CreateCare

CreateCaret() creates a cursor with a size of nWidth x nHeight. It creates a solid cursor if hBitmap is NULL else the bitmap is used for drawing the cursor.

BOOL WINAPI CreateCaret(HWND hWnd, HBITMAP hBitmap, int nWidth, int nHeight);

DestroyCaret

Frees the memory of cursor object and releases the handle

BOOL WINAPI DestroyCaret(void);

GetCaretBlinkTime

Returns the current blink interval time of the cursor in milliseconds. The less the number the more the blink rate.

UINT WINAPI GetCaretBlinkTime(void);

GetCaretPos

Returns the current position of the cursor.

BOOL WINAPI GetCaretPos(LPPOINT lpPoint);

HideCaret

Hides the cursor of the window.

BOOL WINAPI HideCaret(HWND hWnd);

SetCaretBlinkTime

Set the blink time of the caret in miliseconds. The less the time the more the blinking rate.

BOOL WINAPI SetCaretBlinkTime(UINT uMSeconds);

SetCaretPos

SetCaretPos set the caret position in the window

BOOL WINAPI SetCaretPos(int X, int Y);

ShowCaret

ShowCaret shows the blinking caret

BOOL WINAPI ShowCaret(HWND hWnd);

Caret Demo application

Demo aplication showing Create, Destroy, Show, Hide of Caret/Cursor. With UP arrow key, caret blink time is reduced and blink rate increases. With DOWN arrow key, caret blink time is increated and blink rate reduced.

unsigned int nBlinkRate;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  CHAR szTitle[100];
  switch (message) 
  {
    case WM_KEYDOWN:
            if(wParam == VK_UP)
      {
              nBlinkRate-=10;
        SetCaretBlinkTime(nBlinkRate);
        sprintf(szTitle,"Cursor blink rate %d", nBlinkRate);
        SetWindowText(hWnd,szTitle);
      }
            else if(wParam == VK_DOWN)
      {
        nBlinkRate+=10;
        SetCaretBlinkTime(nBlinkRate);
        sprintf(szTitle,"Cursor blink rate %d", nBlinkRate);
        SetWindowText(hWnd,szTitle);
      }
      break;
        
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    case WM_SETFOCUS:
        CreateCaret(hWnd, NULL, 12,2);
      SetCaretPos(0,16);
      ShowCaret(hWnd);
      nBlinkRate = GetCaretBlinkTime();
      sprintf(szTitle,"Cursor blink rate %d", nBlinkRate);
        SetWindowText(hWnd,szTitle);
      break;
    case WM_KILLFOCUS:

      HideCaret(hWnd);
      DestroyCaret();
      break;
    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

Output

CreateCaret demo

About our authors: Team EQA

Further readings

Where is WinMain() function in MFC application ?

MFC hides WinMain in its framework and includes source file on WinMain(). This explains how framework calls global CWinApp::Initinstance() from entry WinMain.

What is the utility of CWinApp class?

This is constructed during global C++ objects are constructed and is already available when Windows calls the WinMain function, which is supplied by the ...

Basic steps in Win32 GUI Application with source code.

Define a custom Window class structure, Register the class name, CreateWindow, Show windows and write message get and dispatch loop statements. Define the Window CallBack procedure and write the handlers.

What is a Window CallBack procedure and what is its utility?

DispatchMessage() is a API which indirectly triggers the Window CallBack procedure. Message structure members from this function are passed to the CallBack procedure. CallBack procedure should implement event handlers depending on the need of the application.

What are LPARAM and WPARAM in window proc function?

LPARAM and WPARAM are the two parameters in Window CallBack procedure. They signifies parameters of various events. They are used in handing individual events.

What are the basic steps of a typical MFC based application?

We need to write WinMain and need to follow all these in a Win32 application. However we need not to write much if we are writing an application with MFC ...

#