CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  控件

解决支持MSFlexGrid控件的鼠标滚轮问题时出现的Bug!100分望各位高手出手相救!!!!

楼主wuxuetie(三天)2005-05-02 10:05:26 在 VB / 控件 提问

我用以下办法来解决支持MSFlexGrid控件的鼠标滚轮问题,但是当MSFlexGrid显示的记录正好使得MSFlexGrid的竖向滚动条未出现,也就是记录就是这么一页.但是鼠标滚轮向上滚动,记录就会被去掉(滚动到上面看不见了)!而竖向滚动条未出现(记录比较多的情况)就不会有这个问题!  
  不知道能否解决这个问题??  
  或者大家有什么更好的办法来支持MSFlexGrid控件的鼠标滚轮,可以克服以上问题!我把我的源码附上,恳请各位高手献技献策!  
   
  模块中:  
   
  Option   Explicit  
   
  Public   Const   GWL_WNDPROC   =   (-4)  
  Public   Const   WM_COPYDATA   =   &H4A  
  Public   Const   WM_MOUSEWHEEL   =   &H20A  
  Public   Type   COPYDATASTRUCT  
        dwData   As   Long  
        cbData   As   Long  
        lpData   As   Long  
  End   Type  
   
  Public   Declare   Function   CallWindowProc   Lib   "user32"   Alias   "CallWindowProcA"   (ByVal   lpPrevWndFunc   As   Long,   ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
  Public   Declare   Function   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   (ByVal   hWnd   As   Long,   ByVal   nIndex   As   Long)   As   Long  
  Public   Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hWnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
  Public   Declare   Sub   RtlMoveMemory   Lib   "kernel32"   (lpvDest   As   Any,   lpvSource   As   Any,   ByVal   cbCopy   As   Long)  
   
  Public   prevWndProc   As   Long  
  Public   Function   WndProc(ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
        If   Msg   =   WM_MOUSEWHEEL   Then  
              With   Form1.MSFlexGrid1  
                    If   wParam   =   -7864320   Then    
                          .TopRow   =   .TopRow   +   1'向下滚动  
                    ElseIf   wParam   =   7864320   Then      
                          If   .TopRow   >   1   Then  
                                .TopRow   =   .TopRow   -   1'向上滚动  
                          End   If  
                    End   If  
              End   With  
        Else  
              WndProc   =   CallWindowProc(prevWndProc,   hWnd,   Msg,   wParam,   lParam)  
        End   If  
  End   Function  
   
   
  所在窗体:  
   
  Private   Sub   Form_Load()  
        '表格窗口消息  
        prevWndProc   =   GetWindowLong(MSFlexGrid1.hWnd,   GWL_WNDPROC)  
        Call   SetWindowLong(MSFlexGrid1.hWnd,   GWL_WNDPROC,   AddressOf   WndProc)  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
        '恢复窗口程序  
        Call   SetWindowLong(MSFlexGrid1.hWnd,   GWL_WNDPROC,   prevWndProc)  
  End   Sub  
  问题点数:0、回复次数:3Top

1 楼yinweihong()回复于 2005-05-02 10:25:32 得分 0

试下这个:http://blog.csdn.net/yinweihong/archive/2004/09/25/116638.aspxTop

2 楼MmMVP(杜霖:(现在是DooDu的马甲。。))回复于 2005-05-02 11:40:09 得分 0

楼上的能用,试了可以Top

3 楼wuxuetie(三天)回复于 2005-05-02 13:51:32 得分 0

还是和我的代码效果一样!达不到效果!Top

相关问题

  • 我想在MSFlexGrid控件中加入滚轮事件、集成TextBox等,然后做成用户控件。请高手指点。
  • msflexgrid控件
  • MSFlexGrid控件
  • dtpicker控件bug
  • 关于MSFLEXGRID控件
  • 关于msflexgrid控件
  • 关于MSFlexGrid控件
  • MSFlexGrid控件问题!
  • 关于MSFlexGrid控件
  • 如何让常见控件支持滚轮鼠标?

关键词

  • 鼠标
  • 控件
  • 解决
  • msflexgrid
  • 记录
  • byval
  • 支持
  • 问题
  • 出现
  • 控件的鼠标滚轮

得分解答快速导航

  • 帖主:wuxuetie

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo