用spy++跟一下窗口消息后,再模拟试试 sendmessage可以用的。

解决方案 »

  1.   

    在Paint事件中写重画的代码
    然后在滚动条的时间中调用窗体的Invalidate()事件执行重画
      

  2.   

    可不可以不用重画的办法呀,
    是一个listview,里面有n多数据,重画要死人的。
    我已经用Spy++等到了那个消息,但是c#说命名空间中不存在。WM_HSCORLL和WM_VSCORLL
      

  3.   

    既然要滚动,肯定产生Paint事件,为了提高效率,您可以只重画滚动的那部分内容嘛,有ClipRectangle属性嘛,只重画这部分内容,效率会提高不少!
      

  4.   

    我现在也在做类似的东西,而且遇到同样的问题,关注ing......◎_◎
      

  5.   

    楼主的SendMessage方法能不能写出来给我看看?谢谢
      

  6.   

    其实我的目的是想实现在listview中其中一列是三行的效果(标题和值都是三行),还要可以点击列标题排序,能控制最小列宽,还可以通过鼠标拖动现实列交换,我现在的途径是通过两个listview来实现(有点笨,不过没有什么好办法了),一个大的list作背景,上面放一个小的用来显示多标题的那行。这时候就有一个问题,就是不能用原有的滚动条了,我需要自己用滚动条控制listview滚动,同时移动上面的listview使他和后面的listview相对位置不变。上下滚动我已经基本解决了,现在是水平滚动没有办法.还有一个关键的问题就是鼠标拖动列,listview本身有这个功能,但是我其中一个列是用listview来代替的如果点击到上面的listview怎么才能实现列交换的效果呢。 hxinyu(小新)你所说的重画是什么概念,是通过调用方法让listview自己去画那部分嘛,还是自己手动划线用textout添值,我不太了解,希望能指教一下。
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
    这个是我调用的API,但是在c#中部支持WM_HSCORLL和WM_VSCORLL,我现在是直接取到了整形值作为参数传进去了,不知道这样用对不对,使用如下:
    SendMessage(listView5.Handle,276,0,0);
    运行后没有效果,我不知道后面的两个参数该写什么值
      

  7.   

    public const int WM_LBUTTONDOWN = 0x0201;
    [DllImport("User32.dll",EntryPoint="SendMessage")] 
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    SendMessage(axWebBrowser1.Handle,WM_LBUTTONDOWN,0,0); 
    这样是向axWebBrowser1发送鼠标左键消息吗?
      

  8.   

    滚轮消息也是最后归结到滚动条上来了,可是我现在给listview发滚动的消息他都不响应呢
      

  9.   

    没用啊......先发送单击左键的消息,然后再发送键盘"DOWN"键的消息也没效果,必须鼠标点一下该控件,然后"DOWN"键就起作用了,不知道是什么问题
      

  10.   

    如果向scrollbar发送鼠标消息呢?可行吗?向一个固定坐标发送LBUTTON消息,然后根据需要再发送MOUSEMOVE得消息