to isprogramer:最近我在用VC++做一个文本的IDE环境,改你所说的光标是很简单的事情。 首先必须你了解一些常识: 1.你所说的光标是叫Caret,而鼠标的光标则为cursor 2.你如果想修改Caret的话,就必须注意下面一些情况 1.Caret整个系统只有一个!所以用过就要删除。 2.当你检测到你要处理的那个editbox处于active状态时,先destroycaret... 然后creatcaret(xxx,xxx),参数请自己去查,当editbox处于inactive状态时,不必操心,那个editbox自然会调用destorycaret将其删除.一般情况下,作为一个文本编辑器,只会在active时产生光标,而在inactive时消除光标,在之间的时候都不会去重新生成光标(需注意的是如果editbox的字体发生了变化,它也许会重新生成新的光标),所以你所做的就是在editbox的onactive里做这件事就行了。 事实上,caret可以修改成你所希望的任何形状。不但可以是平躺的,也可以是方块的,还可是是一个小位图。 最后,祝你好运。
gameboy999说的比较详细啊,要是再多个例子(最好是VB的)就好了:)(哈,我就是贪心不足)
例子可以呀,不过我是用delphi写的(因为vb里就是这点不好,任何api的引用必须先宣称) 首先在form里放一个edit或richedit控件 然后在edit或richedit控件的 keybuttonup事件里加入下列语句 delphi: ................ONKEYUP(sender:tobject) begin destroycaret(); creatcaret(edit1.handle,0,100,100);//我这生成100x100的光标,很好玩:) showcaret(edit1.handle);//如果是memo的话就改用memo1.handle,上面一句也是一样 end;//为什么这样?不在onactive里写呢?因为这个edit比我想象的要“狠”,它每写一个字都把光标重新生成!!!!VB: '先宣称 public ...............creatcaret.......... . . . private sub form1.onkeyup() destroycaret(); creatcaret(edit1.hwnd,0,100,100);//我这生成100x100的光标,很好玩:) showcaret(edit1.hwnd);//如果是richedit的话就改用rechedit.hwnd,上面一句也是一样 end sub
光标是一个资源,在VB中默认为竖线,你可以通过调用API将竖线
改为一横线。
首先,在VC的资源编辑器中编辑一横线,生成*.res文件,其次
将*.res文件加入VB的工程,使用API函数HCURSOR LoadCursor( HINSTANCE
hInstance, LPCTSTR lpCursorName); 就可以了。
你说的是鼠标指针吧?isprogramer说的可能是text里的那个一闪一闪的指示当前打字位置的竖线光标!to isprogramer:
你说的是这个意思吗?
如果是TEXT中的那个,我想可以用API
中的CreateCaret函数,应该可行。
首先必须你了解一些常识:
1.你所说的光标是叫Caret,而鼠标的光标则为cursor
2.你如果想修改Caret的话,就必须注意下面一些情况
1.Caret整个系统只有一个!所以用过就要删除。
2.当你检测到你要处理的那个editbox处于active状态时,先destroycaret...
然后creatcaret(xxx,xxx),参数请自己去查,当editbox处于inactive状态时,不必操心,那个editbox自然会调用destorycaret将其删除.一般情况下,作为一个文本编辑器,只会在active时产生光标,而在inactive时消除光标,在之间的时候都不会去重新生成光标(需注意的是如果editbox的字体发生了变化,它也许会重新生成新的光标),所以你所做的就是在editbox的onactive里做这件事就行了。
事实上,caret可以修改成你所希望的任何形状。不但可以是平躺的,也可以是方块的,还可是是一个小位图。
最后,祝你好运。
首先在form里放一个edit或richedit控件
然后在edit或richedit控件的 keybuttonup事件里加入下列语句
delphi:
................ONKEYUP(sender:tobject)
begin
destroycaret();
creatcaret(edit1.handle,0,100,100);//我这生成100x100的光标,很好玩:)
showcaret(edit1.handle);//如果是memo的话就改用memo1.handle,上面一句也是一样
end;//为什么这样?不在onactive里写呢?因为这个edit比我想象的要“狠”,它每写一个字都把光标重新生成!!!!VB:
'先宣称
public ...............creatcaret..........
.
.
.
private sub form1.onkeyup()
destroycaret();
creatcaret(edit1.hwnd,0,100,100);//我这生成100x100的光标,很好玩:)
showcaret(edit1.hwnd);//如果是richedit的话就改用rechedit.hwnd,上面一句也是一样
end sub