看着Edit的光标,是不是觉得了无生趣,想不想换个形状来玩玩,其实很简单,且听我道来。
Edit是Windows的标准控件,它是一个系统范围窗口类,所以任何应用程序都能创建它。其实Edit本质上也是一个窗口,MS实现了它却不开放源代码,只暴露出一些接口给我们操作。Edit的光标(Caret)没有意外,就是通过CreateCaret,ShowCaret等API显示出来的。Edit似乎是在得到焦点时创建并显示Caret,在失去焦点时消毁Caret,此处我们只需在SetFocus消息中创建Caret即可,看如下代码:
type
TwdEdit=class(TEdit)
protected
procedureEditSetFocus(varmessage:TMessage);messageWM_SETFOCUS;
end;
procedureTwdEdit.EditSetFocus(varmessage:TMessage);
var
H:HBITMAP;
begin
inherited;
ifDestroyCaretthen
begin
H:=LoadBitmap(0,MAKEINTRESOURCE(OBM_RGARROW));
ifH=0thenExit;
CreateCaret(Handle,H,8,10);
ShowCaret(Handle);
end;
end;
在你的窗口中创建这个控件,看看效果如何,你只需修改LoadBitmap的参数即可得到你想要的光标,试试吧。
本文介绍了一种在Windows标准控件Edit中自定义光标(Caret)形状的方法。通过覆写WM_SETFOCUS消息处理函数并在获得焦点时调用CreateCaret API,可以实现显示自定义形状的光标。只需简单修改LoadBitmap函数中的参数,即可轻松更换光标的样式。
3万+

被折叠的 条评论
为什么被折叠?



