比如ListBox的滚动条。
我要实现重绘。
我处理的消息有WM_PAINT,WM_HSCROLL,WM_VSCROLL,WM_MOUSEWHEEL我在钩子里先返还消息,然后再开始绘制,结果发现很闪,吃掉消息的话有些地方会不正常。
我用LockWindowUpDate屏幕闪得更厉害了。
请教高手能不能设置窗口内的滚动条为OWNERDRAW风格,或者说说你的经验。谢谢。小弟不才,第一次做这样的东西。
你们如果懂的话,说说要处理哪些消息,如何处理。高分相送。

解决方案 »

  1.   


    你说的是LockWindowUpDate吗?这样屏幕会很闪。闪烁的原因是,返还消息的时候,Windows会绘制滚动条,然后我开始绘制我的滚动条,这样先看到系统的滚动条一闪而过,然后我的滚动条才出现。有没方法不让系统绘制滚动条。
      

  2.   

    chinaboyzyq的意思是使用内存缓冲进行绘制,然后bltbit到控件DC上。
    此外,还需要注意某些事件触发后,不要再调用callwindowproc或defwindowproc,而是直接赋值返回或修改区域有效性后再返回。
      

  3.   

    内置滚动条自绘不是你想的那么简单的, 不只要子类化窗口,还需要HOOK 相关API操作。 你可以搜一个COOLSB的VC开源代码参考一下。
      

  4.   

    Title: cCoolScrollbars (Update: support for 'drop-down' windows)
    By: Carles P.V.
    at: 
    http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=63527&lngWId=1
      

  5.   

    既然 WM_HSCROLL,WM_VSCROLL,WM_MOUSEWHEEL 会自动触发 WM_PAINT,那么你只要在 WM_PAINT 中重绘滚动条就可以了,不需要处理其他几个消息。
      

  6.   

    嗯嗯。看来要直接处理控件里面的ScrollBar确实有很大难度,看来我还是学学VB版的CoolSB的方法,创建一个窗口代替里面的滚动条。