我现在需要做一个这样的树形控件,如果条目信息超出了客户区,不希望通过滚动条来滚动,只要用户按下鼠标键,然后拖动,那么客户区也跟着滚动。    同时我也想请问一下各位,在window中,滚动是怎么实现的呢,对于窗体上的控件还好理解,因为每一个都有自己的坐标,但是对于那些如同树形控件上的节点一样的东西,那么的位置是怎么控制的呢?在这里我注意,滚动好像不是简单的重画。因为界面实现的位置适合具体的节点是关联的,用GetItemRect函数就能获他们的位置信息,但是能不能设置位置信息呢?    当控件接受了WM_HSCROLL(WM_VSCROLL)的时候,他们到底进行哪些操作呢?我想是传给了上面的滚动条控件,那么滚动控件有进行了什么操作呢?
    
    很想跟大家交流一些编程方面的问题,尤其是Windows API方面的。我的MSN是[email protected],欢迎大家加我。
    

解决方案 »

  1.   

    重载ONMOUSEMOVE,在里面判断左键是否按下,如果是,调用ScrollWindow
      

  2.   

    ScrollWindow 是可以滚动窗体,但是节点的位置信息不会更新。而且重画后,又变成原来的样子了
      

  3.   

    绘制不是关键,关键的是节点和位置的对应关系。我如果只是画出来,自己处理WM_PAINT消息也就是了,关键是画出来不等于鼠标点击的时候就命中,在Treeview会有一个Hitstest,就是根据鼠标位置来确定是否点击了末个节点,如果我只是重画了界面内容,是没有含义的,就跟一个普通位图没什么区别了:(
      

  4.   

    在SCROLLWINDOW之前调用UpdateWindow()试试.
    可能还得同时 SETSCROLLINFO()
      

  5.   

    实在不行了,就在ONMOUSEMOVE里面:
    ...
    SETSCROLLINFO(...);
    POSTMESSAGE(WM_VSCROLL,....);