创建输入光标的代码(第三个参数为光标宽度,第四个参数为光标高度)。
CreateCaret(hwnd, nullptr, 2, 40);
设置输入光标的位置:
SetCaretPos(60, 60);
窗口聚焦时显示输入光标:
case WM_SETFOCUS:{
ShowCaret(hWnd);
break;
}
窗口失焦时隐藏输入光标:
case WM_KILLFOCUS:{
HideCaret(hWnd);
break;
}
以上是基本的方法,创建的光标的颜色由系统决定,一般会使用一个与窗口背景颜色对比度高的颜色。
但如果你的窗口颜色是自绘上去的,系统可能算不出光标的颜色,此时可能就会用一个默认颜色来设置光标颜色(往往是白色)
你想要自定义光标颜色,就得使用CreateCaret方法的第二个参数,如下代码所示:
HDC hdc = GetDC(hwnd);
HBITMAP hBitmap = CreateBitmap(2, 40, 1, 1, nullptr); // 1 位深度单色位图
HDC hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, hBitmap);
RECT rect = { 0, 0, 2, 40 };
FillRect(hdcMem, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH));
CreateCaret(hwnd, hBitmap, 2, 40);
DeleteDC(hdcMem);
DeleteObject(hBitmap);
ReleaseDC(hwnd, hdc);
这样设置的光标,在调用ShowCaret方法之后,光标一般会闪烁6次,6次之后就不会再闪烁了,要想让它再次闪烁,必须再次调用ShowCaret方法,这个行为与Windows自带的记事本的行文一致。要想改变这个行为,就必须得自绘光标。