如何使用Windows API让窗口显示输入光标以及相关问题

创建输入光标的代码(第三个参数为光标宽度,第四个参数为光标高度)。

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自带的记事本的行文一致。要想改变这个行为,就必须得自绘光标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liulun

如果文章真帮到了你,谢谢您打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值