none
如何自动显示/隐藏CListCtrl的滚动条? RRS feed

  • 问题

  • 在FormView上的CListCtrl控件,缺省时候不现实滚动条。只有当鼠标移动接近ListCtrl的边框时,再显示滚动条,根据情况确定需要显示横向滚动条或者竖向滚动条,或者两者都显示。

    鼠标完成滚动条拖拽以后,离开滚动条区域,自动隐藏滚动条。

    请问如何实现这个效果,试着在OnMouseHover时显示滚动条,在OnMouseLeave时隐藏滚动条,但这种方法有问题,一个是即使鼠标没靠近边框,进入CListCtrl区域就显示滚动条了。另一个问题更严重,显示滚动条以后,鼠标点中滚动条准备拖动时,滚动条不断闪烁。应该是不断的显示隐藏,就是说不断的响应OnMouseHover和OnMouseLeave。

    请问为达到自动隐藏效果,需要处理什么消息?有没有参考的例子?

    2019年4月10日 5:33

全部回复

  • 你好,

    感谢您在MSDN论坛发帖提问。

    >>如何自动显示/隐藏CListCtrl的滚动条?

    我建议你可以尝试调用Windows的API函FlatSB_EnableScrollBar。你只要在你的自绘listctrl类的合适的位置调用以下代码,控件的滚动条将完美地被隐藏起来:

        InitializeFlatSB(this->m_hWnd);                                                 
        FlatSB_EnableScrollBar(this->m_hWnd, SB_BOTH, ESB_DISABLE_BOTH);     

    CListCtrl控件自带的滚动条并不是CScrollBar控件,而是自己画上去的假窗口,因此实际上是通过CLIstCtrl的GetScrollInfoSetScrollInfo函数完成了滚动条位置信息的查询和设置。

    更多关于隐藏和自绘CListCtrl的滚动条细节你可以参考以下链接:https://blog.csdn.net/dyzhen/article/details/48064473

    我建议你可以尝试使用WM_MOUSEMOVE消息实现自动显示/隐藏CListCtrl的滚动条。当光标移动时发布到窗口。如果未捕获鼠标,则会将消息发布到包含光标的窗口。否则,消息将发布到捕获鼠标的窗口。ListCtrl的滚动条不断闪烁的问题,你可以尝试采用双缓冲来解决。

    Best Wishes,

    Jeanine Zhang
    2019年4月10日 8:57
    版主
  • 你好

    你有任何更新吗? 如果您的案例已经解决,请帮助标记答案。 如果有,请随时与我们联系。
    您的理解与合作将不胜感激。

    Best Wishes,

    Jeanine Zhang

    2019年4月17日 7:45
    版主
  • 没有,还没有解决。这个问题暂时先没处理,等忙完手头的高优先级的工作在回头处理这个问题。

    有解决办法会上来更新。多谢

    2019年4月18日 1:46