首页 【精选】让MSflexgrid支持鼠标滚轮(VB6)

【精选】让MSflexgrid支持鼠标滚轮(VB6)

举报
开通vip

【精选】让MSflexgrid支持鼠标滚轮(VB6)【精选】让MSflexgrid支持鼠标滚轮(VB6) 让Msflexgrid控件支持鼠标滚轮(VB6) Msflexgrid控件是使用非常广泛的一个控件。但由于Msflexgrid控件不支持鼠标滚轮, 给用户使用带来了不少使用上的不习惯。 网上就“让Msflexgrid控件支持鼠标滚轮”给出了具体的例子,实现方法主要集中于 “子类化”,使用全局鼠标钩子的很少。虽然这些例子解决了“让Msflexgrid控件支持鼠 标滚轮”这个问题,但依然有一些小问题,那就是自由度还不够(或者说需要自己用代 码控制以免出错),比...

【精选】让MSflexgrid支持鼠标滚轮(VB6)
【精选】让MSflexgrid支持鼠标滚轮(VB6) 让Msflexgrid控件支持鼠标滚轮(VB6) Msflexgrid控件是使用非常广泛的一个控件。但由于Msflexgrid控件不支持鼠标滚轮, 给用户使用带来了不少使用上的不习惯。 网上就“让Msflexgrid控件支持鼠标滚轮”给出了具体的例子,实现 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 主要集中于 “子类化”,使用全局鼠标钩子的很少。虽然这些例子解决了“让Msflexgrid控件支持鼠 标滚轮”这个问题,但依然有一些小问题,那就是自由度还不够(或者说需要自己用代 码控制以免出错),比如滚动一页,比如滚轮定位。下面,我将自己测试得到的成果介绍 如下。(PS:后面我还附加了判断MSFGrid控件是否有滚动条的方法)(再PS:如果要引 用本文,请注明出处) '在Module模块里的代码: 'API函数和常数申明 Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Const GWL_WNDPROC = (-4) Private 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 Private Const WM_MOUSEWHEEL = &H20A Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetScrollRange Lib "user32 " (ByVal hWnd As Long, ByVal nBar As Long, lpMinPos As Long, lpMaxPos As Long) As Long Private Const SB_HORZ = &H0 Private Const SB_VERT = &H1 Private Declare Function GetFocus Lib "user32" () As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long '定义变量 Private lhWnd As Long, SubhWnd As Long Private FhWnd As Long, L As Long, clsName As String Public MSFG As MSFlexGrid '启动子类化,传入Form1.hWnd Public Sub Start_SubClass(ByVal hWnd As Long) lhWnd = hWnd SubhWnd = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf SubClass) End Sub '结束子类化 Public Sub Exit_SubClass() Call SetWindowLong(lhWnd, GWL_WNDPROC, SubhWnd) End Sub '子类化函数 Public Function SubClass(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long SubClass = CallWindowProc(SubhWnd, hWnd, Msg, wParam, lParam) If Msg = WM_MOUSEWHEEL Then '测试消息用 'Form1.Print Hex(wParam) 'Call MoveMSFGWheel_A(wParam) '方法一 Call MoveMSFGWheel_B(wParam) '方法二 End If End Function '方法一 Private Sub MoveMSFGWheel_A(wParam As Long) '判断是否有MSFlexGrid获得焦点,需要在MSFlexGrid的GotFocus事件里设置Set MSFG =MSFlexGrid1,在MSFlexGrid的LostFocus事件里设置Set MSFG =Nothing If Not MSFG Is Nothing Then With MSFG Select Case wParam Case &H780000 '向上滚滚动条 If .TopRow > .FixedRows Then .TopRow = .TopRow - 1 Case &H780008 '按住Ctrl向左滚滚动条 If .LeftCol > .FixedCols Then .LeftCol = .LeftCol - 1 Case &HFF880000 '向下滚滚动条 If .TopRow < .Rows - 2 Then .TopRow = .TopRow + 1 Case &HFF880008 '按住Ctrl向右滚滚动条 If .LeftCol < .Cols - 2 Then .LeftCol = .LeftCol + 1 End Select End With End If End Sub '方法二 '垂直 'Call SendMessage(MSFlexGrid1.hwnd, 277, 0, 0) '往上滚 'Call SendMessage(MSFlexGrid1.hwnd, 277, 1, 0) '往下滚 'Call SendMessage(MSFlexGrid1.hwnd, 277, 2, 0) '往上滚一页 'Call SendMessage(MSFlexGrid1.hwnd, 277, 3, 0) '往下滚一页 'Call SendMessage(MSFlexGrid1.hwnd, 277, &HE0004, 0) '跳到第14行 'Call SendMessage(MSFlexGrid1.hwnd, 277, 6, 0) '顶部 'Call SendMessage(MSFlexGrid1.hwnd, 277, 7, 0) '底部 '水平 'Call SendMessage(MSFlexGrid1.hwnd, 276, 0, 0) '往左滚 'Call SendMessage(MSFlexGrid1.hwnd, 276, 1, 0) '往右滚 'Call SendMessage(MSFlexGrid1.hwnd, 276, 2, 0) '往左滚一页 'Call SendMessage(MSFlexGrid1.hwnd, 276, 3, 0) '往右滚一页 'Call SendMessage(MSFlexGrid1.hwnd, 276, &HE0004, 0) '跳到第14列 'Call SendMessage(MSFlexGrid1.hwnd, 276, 6, 0) '左边缘 'Call SendMessage(MSFlexGrid1.hwnd, 276, 7, 0) '右边缘 '知道了上面那些消息,就能很自由的控制MSFlexGrid了, '当然,结合LeftCol和TopRow属性来控制,那就更完美了。 Private Sub MoveMSFGWheel_B(wParam As Long) '获得窗体上的拥有焦点的控件的hWnd和类名 FhWnd = GetFocus() L = 255: clsName = String(L, Chr(0)) L = GetClassName(FhWnd, clsName, L): clsName = Left(clsName, L) '判断拥有焦点的控件的类型是否为MSFlexGrid If clsName = "MSFlexGridWndClass" Then Select Case wParam Case &H780000 '向上滚滚动条 Call SendMessage(FhWnd, 277, 0, 0) Case &H780004 '按住Shift向上滚一页滚动条 Call SendMessage(FhWnd, 277, 2, 0) Case &H780008 '按住Ctrl向左滚滚动条 Call SendMessage(FhWnd, 276, 0, 0) Case &H78000C '按住Shift+Ctrl向左滚滚动条 Call SendMessage(FhWnd, 276, 2, 0) Case &HFF880000 '向下滚滚动条 Call SendMessage(FhWnd, 277, 1, 0) Case &HFF880004 '按住Shift向下滚一页滚动条 Call SendMessage(FhWnd, 277, 3, 0) Case &HFF880008 '按住Ctrl向右滚滚动条 Call SendMessage(FhWnd, 276, 1, 0) Case &HFF88000C '按住Shift+Ctrl向右滚一页滚动条 Call SendMessage(FhWnd, 276, 3, 0) End Select End If End Sub '判断滚动条水平可见 Public Function VsScroll(MSFGrid As MSFlexGrid) As Boolean Dim i As Long, lpMinPos As Long, lpMaxPos As Long i = GetScrollRange(MSFGrid.hWnd, SB_HORZ, lpMinPos, lpMaxPos) '网上介绍的判断“lpMaxPos <> lpMinPos”是否为真就能判断滚动条是否显示 '实际测试时,这个判断不完全正确,还要再加上判断“lpMinPos <> 0”。 If lpMaxPos <> lpMinPos And lpMinPos <> 0 Then VsScroll = True End Function '判断滚动条垂直可见 Public Function HeScroll(MSFGrid As MSFlexGrid) As Boolean Dim i As Long, lpMinPos As Long, lpMaxPos As Long i = GetScrollRange(MSFGrid.hWnd, SB_VERT, lpMinPos, lpMaxPos) '网上介绍的判断“lpMaxPos <> lpMinPos”是否为真就能判断滚动条是否显示 '实际测试时,这个判断不完全正确,还要再加上判断“lpMinPos <> 0”。 If lpMaxPos <> lpMinPos And lpMinPos <> 0 Then HeScroll = True End Function '在Form模块里的代码: Private Sub Form_Load() Dim i As Long With MSFlexGrid1 .Rows=50 For i = 0 To .Rows - 1 .TextMatrix(i, 0) = CStr(i) Next i .Cols=50 For i = 0 To .Cols - 1 .TextMatrix(0, i) = CStr(i) Next i End With Call Start_SubClass(Me.hWnd) End Sub Private Sub Form_Unload(Cancel As Integer) Call Exit_SubClass End Sub 'Private Sub MSFlexGrid1_GotFocus() ' Set MSFG = MSFlexGrid1 'End Sub 'Private Sub MSFlexGrid1_LostFocus() ' Set MSFG = Nothing 'End Sub 作者:KL1112 邮箱:KL1112@163.com QQ:910357781 2011.11.21 《测量学》模拟 试卷 云南省高中会考试卷哪里下载南京英语小升初试卷下载电路下试卷下载上海试卷下载口算试卷下载 一、单项选择题(每小题1 分,共20 分) 得分 评卷人 复查人 在下列每小题的四个备选 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 中选出一个正确的答 案,并将其字母标号填入题干的括号内。 1(经纬仪测量水平角时,正倒镜瞄准同一方向所读的水平方向值理论上应相差(A )。 A 180? B 0? C 90? D 270? 2. 1:5000地形图的比例尺精度是( D )。 A 5 m B 0.1 mm C 5 cm D 50 cm 3. 以下不属于基本测量工作范畴的一项是( C)。 A 高差测量 B 距离测量 C 导线测量 D 角度测量 4. 已知某直线的坐标方位角为220?,则其象限角为(D )。 A 220? B 40? C 南西50? D 南西40? 5. 由一条线段的边长、方位角和一点坐标计算另一点坐标的计算称为(A )。 A 坐标正算 B 坐标反算 C 导线计算 D 水准计算 6. 闭合导线在X轴上的坐标增量闭合差( A )。 A为一不等于0的常数 B 与导线形状有关 C总为0 D 由路线中两点确定 7. 在地形图中, 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示测量控制点的符号属于(D )。 A 比例符号 B 半依比例符号 C 地貌符号 D 非比例符号 8. 在未知点上设站对三个已知点进行测角交会的方法称为(A )。 A 后方交会 B 前方交会 C 侧方交会 D 无法确定 9. 两井定向中不需要进行的一项工作是(C )。 A 投点 B 地面连接 C 测量井筒中钢丝长度 D 井下连接 10. 绝对高程是地面点到( C )的铅垂距离。 A 坐标原点 B任意水准面 C 大地水准面 D 赤道面 11(下列关于等高线的叙述是错误的是:(A ) A( 高程相等的点在同一等高线上 B( 等高线必定是闭合曲线,即使本幅图没闭合,则在相邻的图幅闭合 C( 等高线不能分叉、相交或合并 8 D( 等高线经过山脊与山脊线正交 12(下面关于非比例符号中定位点位置的叙述错误的是(B ) A(几何图形符号,定位点在符号图形中心 B(符号图形中有一个点,则该点即为定位点 C(宽底符号,符号定位点在符号底部中心 D(底部为直角形符号,其符号定位点位于最右边顶点处 13(下面关于控制网的叙述错误的是(D ) A( 国家控制网从高级到低级布设 B( 国家控制网按精度可分为A、B、C、D、E五等 C( 国家控制网分为平面控制网和高程控制网 D( 直接为测图目的建立的控制网,称为图根控制网 14(下图为某地形图的一部分,各等高线高程如图所视,A点位于线段MN上,点A到点 M和点N的图上水平距离为MA=3mm,NA=2mm,则A点高程为(A ) A( 36.4m M B( 36.6m A C( 37.4m 37 N D( 37.6m 35 36 ,15(如图所示支导线,AB边的坐标方位角为,转折角如图,则CD边,,12530'30''AB A D 的坐标方位角,为( B ) CD100?100? 30 30 130?C B 30 ,,,,7530'30''1530'30''4530'30''2529'30''A( B( C( D( 16(三角高程测量要求对向观测垂直角,计算往返高差,主要目的是(D ) A( 有效地抵偿或消除球差和气差的影响 B( 有效地抵偿或消除仪器高和觇标高测量误差的影响 C( 有效地抵偿或消除垂直角读数误差的影响 D(有效地抵偿或消除读盘分划误差的影响 17(下面测量读数的做法正确的是( C ) A( 用经纬仪测水平角,用横丝照准目标读数 测量学试卷 第 9 页(共 7 页) B( 用水准仪测高差,用竖丝切准水准尺读数 C( 水准测量时,每次读数前都要使水准管气泡居中 D( 经纬仪测竖直角时,尽量照准目标的底部 18(水准测量时对一端水准尺进行测量的正确操作步骤是( D )。 A 对中----整平-----瞄准----读数 A 整平----瞄准----读数----精平 C 粗平----精平----瞄准----读数 D粗平----瞄准----精平----读数 19(矿井平面联系测量的主要任务是( D ) A 实现井上下平面坐标系统的统一 B 实现井上下高程的统一 C 作为井下基本平面控制 D 提高井下导线测量的精度 20( 井口水准基点一般位于( A )。 A 地面工业广场井筒附近 B 井下井筒附近 C 地面任意位置的水准点 D 井下任意位置的水准点 得分 评卷人 复查人 二、填空题(每空2分,共20分) 21水准测量中,为了进行测站检核,在一个测站要测量两个高差值进行比较,通常采用的测量检核方法是双面尺法和 。 22直线定向常用的标准方向有真子午线方向、_____磁北方向____________和坐标纵线方向。 23地形图符号一般分为比例符号、_半依比例符号_________________和不依比例符号。 24 井下巷道掘进过程中,为了保证巷道的方向和坡度,通常要进行中线和____________的标定工作。 25 测量误差按其对测量结果的影响性质,可分为系统误差和_偶然误差______________。 26 地物注记的形式有文字注记、 ______ 和符号注记三种。 27 象限角的取值范围是: 0-90 。 28 经纬仪安置通常包括整平和 对中 。 29 为了便于计算和分析,对大地水准面采用一个规则的数学曲面进行表示,这个数学曲面称为 参考托球面 。 10 。 30 光电测距仪按照测量时间的方式可以分为相位式测距仪和 差分 三、名词解释(每小题5分,共20分) 得分 评卷人 复查人 31(竖盘指标差 竖盘分划误差 32(水准测量 利用水准仪测定两点间的高差 33(系统误差 由客观原因造成的具有统计规律性的误差 34(视准轴 仪器望远镜物镜和目镜中心的连线 四、简答题(每小题5分,共20分) 得分 评卷人 复查人 35(简述测回法测量水平角时一个测站上的工作步骤和角度计算方法。 对中,整平,定向,测角。观测角度值减去定向角度值 测量学试卷 第 11 页(共 7 页) 36(什么叫比例尺精度,它在实际测量工作中有何意义, 图上0.1毫米在实地的距离。可以影响地物取舍 37(简述用极坐标法在实地测设图纸上某点平面位置的要素计算和测设过程。 38(高斯投影具有哪些基本规律。 12 得分 评卷人 复查人 五、计算题(每小题10分,共20分) 39(在1:2000图幅坐标方格网上,量测出ab = 2.0cm, ac = 1.6cm, ad = 3.9cm, ae = 及其坐标方位角α。 5.2cm。试计算AB长度DABAB 1800 A d b B a 1600 c e 1200 1400 40(从图上量得点M的坐标X=14.22m, Y=86.71m;点A的坐标为X=42.34m, MMAY=85.00m。试计算M、A两点的水平距离和坐标方位角。 A 测量学试卷 第 13 页(共 7 页) 测量学 标准答案与评分说明 一、 一、 单项选择题(每题1分) 1 A; 2 D; 3 C; 4 D; 5 A; 6 C; 7 D; 8 A; 9 C; 10 C; 11 A;12 D;13 B;14 A; 15 B;16 A;17 C;18 D; 19 A;20 A 二、 二、 填空题 (每空2分,共20分) 21 变更仪器高法 22 磁北方向 23 半依比例符号(或线状符号) 24(腰线 25(偶然误差 26(数字注记 27 大于等于0度且小于等于90度(或[0?, 90?]) 28 对中 29 旋转椭球体面 30 脉冲式测距仪 三、 三、 名词解释(每题5分,共20分) 31竖盘指标差:在垂直角测量中,当竖盘指标水准管气泡居中时,指标并不恰好指向其正 确位置90度或270度,而是与正确位置相差一个小角度x, x即为竖盘指标差。 32 水准测量:利用一条水平视线并借助于水准尺,测量地面两点间的高差,进而由已知点 的高程推算出未知点的高程的测量工作。 33 系统误差:在相同的观测条件下,对某量进行了n次观测,如果误差出现的大小和符号 均相同或按一定的规律变化,这种误差称为系统误差。 34视准轴:望远镜物镜光心与十字丝中心(或交叉点)的连线。 四、 四、 简答题(每题5分,共20分) 35 (1)在测站点O上安置经纬仪,对中,整平 (1分) (2)盘左瞄准A点,读数L,顺时针旋转照准部到B点,读数L,计算上半测回AB角度O=L-L; 1BA (2分) (3)旋转望远镜和照准部,变为盘右方向,瞄准B点读数R,逆时针旋转到A点,B读数R,计算下半测回角度O=R-R; A2BA (3分) (4)比较O和O的差,若超过限差则不符合要求,需要重新测量,若小于限差,则12 取平均值为最终测量结果 O = (O+O)/2 12 (5分) 36 图上0.1mm对应的实地距离叫做比例尺精度。 (3分) 14 其作用主要在于:一是根据地形图比例尺确定实地量测精度;二是根据地形图上需要表示地物地貌的详细程度,确定所选用地形图的比例尺。 (5分) 37 要素计算:从图纸上量算待测设点的坐标,然后结合已有控制点计算该点与控制点连线之间的方位角,进而确定与已知方向之间所夹的水平角,计算待测设点到设站控制点之间的水平距离。 (3分) 测设过程:在设站控制点安置经纬仪,后视另一控制点,置度盘为0度,根据待定方向与该方向夹角确定方向线,根据距离确定点的位置。 (5分) 38 高斯投影的基本规律是: 中央子午线的投影为一直线,且投影之后的长度无变形;其余子午线的投(1) (1) 影均为凹向中央子午线的曲线,且以中央子午线为对称轴,离对称轴越远,其长度变形也就越大; (2) (2) 赤道的投影为直线,其余纬线的投影为凸向赤道的曲线,并以赤道为对称轴; (3) (3) 经纬线投影后仍保持相互正交的关系,即投影后无角度变形; (4) (4) 中央子午线和赤道的投影相互垂直。 评分说明:答对一条得2分,答对三条即可得满分。 五、 五、 计算题(每题10分,共20分) 39 bd = ad – ab = 1.9cm, 因此?X = -38m; ce = ae – ac = 3.6cm, 因此?Y = -72m; (3分) (或由图根据比例尺和距离计算A、B两点的坐标) 因此距离为:81.413m (6分) AB的方位角为:242?10′33″ (10分) (方位角计算应说明具体过程,过程对结果错扣2分) 40 ?X = X – X = 28.12m, ?Y = Y – Y = -1.71m (2分) AMAM221/2 距离d = (?X + ?Y)= 28.17m (5分) 方位角为:356 ?31′12″ (应说明计算过程与主要公式) (10分) 可通过不同方法计算,如先计算象限角,再计算方位角。 说明:在距离与方位角计算中,算法公式对但结果错各1分 测量学试卷 第 15 页(共 7 页)
本文档为【【精选】让MSflexgrid支持鼠标滚轮&#40;VB6&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_562397
暂无简介~
格式:doc
大小:39KB
软件:Word
页数:16
分类:工学
上传时间:2017-10-16
浏览量:63