如何重绘编程框、List控件等的滚动条(不能在上层加上一个滚动条遮住原来的滚动条)

解决方案 »

  1.   

    要绘制滚动条需要处理的消息很多
    如:WM_NCPAINT,所有以WM_NC开始的鼠标消息,(HOVER可以不处理),WM_HSCROLL, WM_VSCROLL,WM_TIMER(编辑框用这个实现鼠标滚轮滚动).WM_KEYDOWN,WM_KEYUP,WM_CHAR,WM_LBUTTONDOWN,
    最重要的是在这些消息里面,有些消息你必须发回原消息处理函数处理.然后再自己绘制滚动条.
    自己用SPY++的消息记录功能看就很容易明白了。一个消息一个消息的处理。
      

  2.   

    例子有的,老外写有个coolsb静态库专门画这个的
    codeproject上搜下CSDN也有人做有demo,基本跟coolsb差不多http://search.download.csdn.net/source/1013411
      

  3.   


    我看过coolsb,有问题
    1.如果不使用Detour方案,对标准控件带滚动条样式时,没有效果.
    2.如果使用Detour方案,我现在还没找到合适的Detour库。以我的经验来看。用替换消息处理过程的方法来实现是最实用的。
      

  4.   


    1、我一般都是用标准带滚动条样式的,用Windows的东西通用,移植好
    自己画容易出问题,而且感觉不太好移植
    2、 微软不是有个Detour静态库么?替换消息处理过程当然是要的,接收非客户区消息,处理重画
    detour只是hook一些API,这样才知道什么时候该画什么状态
    滚动滑块位置等,不Hook的话自己去处理鼠标键盘逻辑就相对复杂了
    而且容易处理不当coolsb是有些小bug的,改过来就好
    mynamelj 发的http://search.download.csdn.net/source/1013411 这个例子还是不错的(好像就是改造下coolsb),但是有还是些小bug,一般下不会有什么大问题,不知道他改过来没?
      

  5.   

    想知道什么时候该画什么什么是不需要Detour的,通过GetScrollBarInfo和GetScrollInfo两个函数配合就可以了
    如果自己程序的界面做过一些美化,再用标准的滚动条,到了某些主题下,就难看了。
    其实coolsb不用Detour的方案处理得差不多了。但好像忘了处理鼠标滚轮,和WM_TIMER消息,编辑框居然是通过WM_TIMER消息来实现鼠标滚轮滚动的.有点想不到.....