我想问一下,我在WM_SETFOCUS中用CreateCaret函数在加上ShowCaret才能显示出插入符
而我在,WM_PAINT消息中在BeginPaint()与EndPaint()之间使用CreateCaret就可以直接显示出插入符,无须调用ShowCaret函数就可以出来了,我要在BeginPaint()和EndPaint()之外使用CreateCaret函数,须调用ShowCaret函数才能显示插入符?这是什么?
我在书上看,也是说,应该按着先增加一个插入符,然后在显示插入符的步骤进行,而为什么在BeginPaint()与EndPaint()之间直接调用CreateCaret函数无须调用ShowCaret就可以直接显示了呢?

解决方案 »

  1.   

    ShowCaret和HideCaret是必须一一对应的,也就是说调用多少次HideCaret之后,必须调用ShowCaret同样多次才能显示;另一方面,调用ShowCaret一次以后就有效了,你可以试着不要在WM_SETFOCUS中调用ShowCaret看看。
      

  2.   

    我的意思是,在WM_PAINT消息中的BeginPaint()与EndPaint()之间直接调用,CreateCaret函数就可以直接显示插入符了,无须调用ShowCaret,这个是为啥呢?
      

  3.   

    The caret is hidden until the application calls the ShowCaret function to make the caret visible. MSDNh这么说,不过我没有试过你所说的方法
      

  4.   

    所以说我觉得有点奇怪MSDN上是说的通过ShowCaret才能出来。可是为啥在WM_PAINT消息中的BeginPaint()EndPaint()函数之间直接就能显示出来呢?无须呼叫ShowCaret
      

  5.   

    Show不Show Caret和Paint()无关,
      

  6.   

    CreateCaret创建插入符后,默认是隐藏的,必须调用ShowCaret才能显示出来;而在BeginPaint与EndPaint之间加入
    而不需要ShowCaret这是因为窗口进行重绘,把插入符显示出来。
      

  7.   

    BeginPaint 和EndPaint之间是屏幕刷新重绘,估计内部做了显示插入符的相关操作吧,呵呵。
    当你在其他地方调用CreateCaret后,因为没有刷新屏幕,所以显示不出来,调用ShowCaret估计也是刷新相关的区域来实现的,呵呵。
    个人猜测而已。期待高人