如何改变edit空间中光标的颜色,或者让光标不显示!!!!!!!!!!!!

时间:2021-08-27 08:56:39
如题!!!想要改变EDIT控件中竖线光标的颜色该怎么办!!请教各位了!!!

8 个解决方案

#1


要想光标不显示,重写EDIT的函数OnSetFocus,让它直接什么都不处理

#2


尝试下这个
SetConsoleCursorInfo

#3


CWnd::HideCaret
void HideCaret( );

#4


有两个函数可以使用: 
第一个:
函数功能;该函数为系统插入标记创建一个新的形状,并且将插入标记的属主关系指定给特定的窗口。插入标记的形状。可以是线、块或位图。

    函数原型:BOOL CreateCaret(HWND hWnd,HBIBMAP hBitmap,int nHeight); 

    参数:

    hWnd:指定佣有插入标记的窗口。

    hBitmap:标识用于定义插入标记形状的位图。如果该参数为NULL,那么插入标记是实心的(原色),如果该参数为(HBITMAP)1,那么插入标记是灰色的。如果该参数是位图句柄,那么插入标记就是指定的位图。位图句栖必须已中由CreateBitmap、CreatDIBitmap或LoadBitmap函数创建。

    如果hBitmap为位图句栖,那么CreateCaret函数将忽略参数nWidth和nHeight,因为该位图定义了自己的宽度和高度。

    nWidth:按逻辑单位指定插入标记的宽度,如果该参数为零,那么宽度就设为系统定义的窗口边界宽度。如果hBitmap是位图句柄,那么函数CreateCaret忽略该参数。

    nHeight:按逻辑单位指定插入标记的高度。如果该参数为零,那么高度就设为系统定义的窗口边界高度如果hBitmap是位图句柄,那么函数CreateCaret忽略该参数。

    返回值:如果函数执行成功,返回值为非零;如果函数执行失败,那么返回值为零。若想获取更多错误 信息,请调用GetLastError函数。

    备注:参数nWidth和nHeight指定了插入标记的宽度和高度,这些值按逻辑单位表示;按像素表示的真正 宽度和高度与窗口的映射模式有关。

    CreateCaret函数自动清除前一个插入标记的形状,不考虑拥有该插入标记的窗口。新创建的插入标记一直隐藏,直到应用程序调用ShowCaret函数使该插入标记可见为止。

    系统为每个队列提供一个插入标记。窗口只有在它有键盘焦点(focus)或者它是活动窗口时才创建插入标记。该窗口应在键盘焦点消失或窗口变为不活动之前,清除插入标记。

    可以通过使用GetSystemMetrics函数,并指定SM_CXBORDER和SM_CYBORDER值来检索系统窗口边界的宽度或高度。使用窗口边界的宽度或高度可以保证插入标记在高分辨率屏幕上可见。

    对于Windows CE:Windows CE不支持hBitmap参数,并且该参数应设为NULL。Windows CE缺省的是实心(Solid)插入标记。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。
第二个:
   函数功能:该函数将屏幕上的插入标记清除。实际上是隐藏插入标记,并不是删除其当前形状或使插入点无效。

    函数原型:B00L HideCaret(HWND hWnd);

    参数:

    hWnd:标识有插入标记的窗口。如果该参数为NULL,那么HideCaret函数搜索当前任务,以发现拥有插入标记的窗口。

    返回值:如果函数执行成功,那么返回值为非零:如果函数失败,那么返回值为零。若想获取更多错误信息,请调用GetLastError函数。

    备注:只有指定的窗口拥有插入标记时,HideCaret才隐藏插入标记。如果指定的窗口没有插入标记,那么函数HideCaret什么也不做,并且返回FALSE。

    隐藏操作是累计的,如果应用程序连续5次调用HideCaret,那么该程序也必须调用ShowCaret 5次才能显示插入标记。

    速查;Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:USer32.lib。

#5


最笨的办法是自己重新实现一个CEdit类。在新类中加入自己的功能。

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#7


引用 3 楼 schlafenhamster 的回复:
CWnd::HideCaret
void HideCaret( );

正解.可以达到楼主要求

#8


该回复于2010-12-01 13:17:55被版主删除

#1


要想光标不显示,重写EDIT的函数OnSetFocus,让它直接什么都不处理

#2


尝试下这个
SetConsoleCursorInfo

#3


CWnd::HideCaret
void HideCaret( );

#4


有两个函数可以使用: 
第一个:
函数功能;该函数为系统插入标记创建一个新的形状,并且将插入标记的属主关系指定给特定的窗口。插入标记的形状。可以是线、块或位图。

    函数原型:BOOL CreateCaret(HWND hWnd,HBIBMAP hBitmap,int nHeight); 

    参数:

    hWnd:指定佣有插入标记的窗口。

    hBitmap:标识用于定义插入标记形状的位图。如果该参数为NULL,那么插入标记是实心的(原色),如果该参数为(HBITMAP)1,那么插入标记是灰色的。如果该参数是位图句柄,那么插入标记就是指定的位图。位图句栖必须已中由CreateBitmap、CreatDIBitmap或LoadBitmap函数创建。

    如果hBitmap为位图句栖,那么CreateCaret函数将忽略参数nWidth和nHeight,因为该位图定义了自己的宽度和高度。

    nWidth:按逻辑单位指定插入标记的宽度,如果该参数为零,那么宽度就设为系统定义的窗口边界宽度。如果hBitmap是位图句柄,那么函数CreateCaret忽略该参数。

    nHeight:按逻辑单位指定插入标记的高度。如果该参数为零,那么高度就设为系统定义的窗口边界高度如果hBitmap是位图句柄,那么函数CreateCaret忽略该参数。

    返回值:如果函数执行成功,返回值为非零;如果函数执行失败,那么返回值为零。若想获取更多错误 信息,请调用GetLastError函数。

    备注:参数nWidth和nHeight指定了插入标记的宽度和高度,这些值按逻辑单位表示;按像素表示的真正 宽度和高度与窗口的映射模式有关。

    CreateCaret函数自动清除前一个插入标记的形状,不考虑拥有该插入标记的窗口。新创建的插入标记一直隐藏,直到应用程序调用ShowCaret函数使该插入标记可见为止。

    系统为每个队列提供一个插入标记。窗口只有在它有键盘焦点(focus)或者它是活动窗口时才创建插入标记。该窗口应在键盘焦点消失或窗口变为不活动之前,清除插入标记。

    可以通过使用GetSystemMetrics函数,并指定SM_CXBORDER和SM_CYBORDER值来检索系统窗口边界的宽度或高度。使用窗口边界的宽度或高度可以保证插入标记在高分辨率屏幕上可见。

    对于Windows CE:Windows CE不支持hBitmap参数,并且该参数应设为NULL。Windows CE缺省的是实心(Solid)插入标记。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。
第二个:
   函数功能:该函数将屏幕上的插入标记清除。实际上是隐藏插入标记,并不是删除其当前形状或使插入点无效。

    函数原型:B00L HideCaret(HWND hWnd);

    参数:

    hWnd:标识有插入标记的窗口。如果该参数为NULL,那么HideCaret函数搜索当前任务,以发现拥有插入标记的窗口。

    返回值:如果函数执行成功,那么返回值为非零:如果函数失败,那么返回值为零。若想获取更多错误信息,请调用GetLastError函数。

    备注:只有指定的窗口拥有插入标记时,HideCaret才隐藏插入标记。如果指定的窗口没有插入标记,那么函数HideCaret什么也不做,并且返回FALSE。

    隐藏操作是累计的,如果应用程序连续5次调用HideCaret,那么该程序也必须调用ShowCaret 5次才能显示插入标记。

    速查;Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:USer32.lib。

#5


最笨的办法是自己重新实现一个CEdit类。在新类中加入自己的功能。

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#7


引用 3 楼 schlafenhamster 的回复:
CWnd::HideCaret
void HideCaret( );

正解.可以达到楼主要求

#8


该回复于2010-12-01 13:17:55被版主删除