说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

显示窗口的水平和垂直滚动条-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
显示窗口的水平和垂直滚动条-VB资料


由于在外读书,上网都是在网吧,所以回答问题,通常都是三言二语,没有说清楚,不过这一篇可是在寝室的电脑上完成的,当然还有上次回答天水的那篇.我学VB的时候,根本没有交流,那种困难不言而喻.现在能与大家一起谈论VB,是我当初所不敢想象的.好了,言归正传,切入今天的话题----显示窗口的水平和垂直滚动条:
在Delphi中,它的TFORM类可以自动显示水平和垂直滚动条,这不能不让我们这些VB Fan们有些嫉妒,为了实现这个功能,我们不得不自已动手了.
首先从窗口谈起,窗口有许多风格,到API浏览器中可以看到许多以WS_或WS_EX_开头的常量,都是用来指定风格的.要实现水平和垂直滚动条就要修改窗口风格,同时还要响应来自滚动条的消息,才能实现其功能.其实我并不认为直接使用窗口自带的滚动条是一个好方法,使用滚动条控件要灵活的多,你可以在窗口中放入任意多的滚动条控件,但窗口自带的就只能有一个.但使用自带滚动条也有其优点,比如其位置不要用额外的代码进行调整,其它好像就没有了.
在使用方面来说,主要的难点在于其消息的响应,尤其对初学者来说,因为要构造一个子类窗口.其他的min,max值的设置,滚动框的位置的设定,都有对应的API函数来实现.
程序实现:
先在窗口上放两个Lable,两个Botton.

'1.窗口风格的设置
'在窗口声明部分加入
Dim HVisible as Boolean,VVisible as Boolean

Private Sub Form_Load()
Dim OldStyle As Long
Dim hsWidth As Integer
'保存旧风格
OldStyle = SetWindowLong(hWnd, GWL_STYLE, 0)
'设置新风格
Call SetWindowLong(hWnd, GWL_STYLE, OldStyle Or WS_VSCROLL Or WS_HSCROLL)
Command1.Caption = "隐藏垂直滚动条"
Command2.Caption = "隐藏水平滚动条"
Label1 = "垂直滚动条的值"
Label2 = "水平滚动条的值"
'得到水平滚动条的宽度
hsWidth = GetSystemMetrics(SM_CXVHSCROLL)
'改变窗口宽度与高度
Width = Width + hsWidth
Height = Height + hsHeight
VVisible = True
HVisible = True
'怎么样,滚动条显示出来了没有?没有?那么是我眼花了?@_@

'2.滚动范围的设置
yMin = 0: yMax = 100
xMin = 0: xMax = 100
SetScrollRange hWnd, SB_HORZ, xMin, xMax, True
SetScrollRange hWnd, SB_VERT, yMin, yMax, True
'建立子类窗口
SubClass Me
End Sub'End Of Form_Load

'3.滚动条的显示与隐藏
Private Sub Command1_Click()
If VVisible Then
Command1.Caption = "显示垂直滚动条"
ShowScrollBar hWnd, SB_VERT, False
VVisible = False
Else
Command1.Caption = "隐藏垂直滚动条"
ShowScrollBar hWnd, SB_VERT, True
VVisible = True
End If
End Sub

'4.子类窗口的撤消
Private Sub Form_Unload(Cancel As Integer)
UnSubClass Me
End Sub

'从1.窗口风格的设置直到此处都可以直接COPY到窗口代码中

'5.消息响应机制
'添加一个公共模块,在模块中加入以下代码和声明
Public Const SM_CXHSCROLL = 21
Public Const GWL_STYLE = (-16)
Public Const WS_HSCROLL = &H100000
Public Const WS_VSCROLL = &H200000
Public Const SB_BOTH = 3
Public Const SB_HORZ = 0
Public Const SB_VERT = 1
'以下以SB_开头的是用户的滚动请求
Public Const SB_LINEDOWN = 1
Public Const SB_LINELEFT = 0
Public Const SB_LINERIGHT = 1
Public Const SB_LINEUP = 0
Public Const SB_PAGERIGHT = 3
Public Const SB_PAGELEFT = 2
Public Const SB_PAGEDOWN = 3
Public Const SB_PAGEUP = 2
Public Const SB_ENDSCROLL = 8
Public Const SB_THUMBPOSITION = 4
Public Const SB_THUMBTRACK = 5
Public Const GWL_WNDPROC = (-4)
Public Const WM_HSCROLL = &H114
Public Const WM_VSCROLL = &H115
Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Declare Function ShowScrollBar Lib "user32" (ByVal hWnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
Declare Function SetScrollPos Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, ByVal nPos As Long, ByVal bRedraw As Long) As Long
Declare Function SetScrollRange Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, ByVal nMinPos As Long, ByVal nMaxPos As Long, ByVal bRedraw As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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 preWndProc As Long
Public xMin As Integer, xMax As Integer
Public yMin As Integer, yMax As Integer
Public xPos As Integer, yPos As Integer

Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
Dim xInc As Integer, yInc As Integer
Select Case uMsg
Case WM_VSCROLL'垂直滚动条消息
Select Case LoWord(wParam)
Case SB_LINEUP, SB_LINEDOWN
If LoWord(wParam) Then
yInc = 1
Else
yInc = -1
End If
Case SB_PAGEUP, SB_PAGEDOWN
If LoWord(wParam) = SB_PAGEUP Then
yInc = -10
Else
yInc = 10
End If

Case SB_THUMBTRACK
yInc = HiWord(wParam) - yPos
End Select
yPos = yPos + yInc
If yPos < yMin Then yPos = yMin
If yPos > yMax Then yPos = yMax
SetScrollPos hWnd, SB_VERT, yPos, True
Form1.Label1 = yPos
Case WM_HSCROLL'垂直水平条消息
Select Case LoWord(wParam)
Case SB_LINELEFT, SB_LINERIGHT
If LoWord(wParam) Then
xInc = 1
Else
xInc = -1
End If
Case SB_PAGELEFT, SB_PAGERIGHT
If LoWord(wParam) = SB_PAGELEFT Then
xInc = -10
Else
xInc = 10
End If
Case SB_THUMBTRACK
xInc = HiWord(wParam) - xPos
End Select
xPos = xPos + xInc
If xPos < xMin Then xPos = xMin
If xPos > xMax Then xPos = xMax
SetScrollPos hWnd, SB_HORZ, xPos, True
Form1.Label2 = xPos
End Select
WindowProc = CallWindowProc(preWndProc, hWnd, uMsg, wParam, lParam)
End Function
Public Sub SubClass(frm As Form)
preWndProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnSubClass(frm As Form)
Call SetWindowLong(frm.hWnd, GWL_WNDPROC, preWndProc)
End Sub
'The function below is much useful in API development.
Private Function LoWord(num As Long) As Integer
LoWord = num Mod &H10000
End Function
Private Function HiWord(num As Long) As Integer
HiWord = (num And &HFFFF0000) / &H10000
End Function
说明:
此程序调试比较困难,应注意不要用VB工具栏中的"结束"按钮来结束该程序,只能通过窗口上的"关闭"按钮,而且在程序中不能出错,否则VB就当掉了.

AsyncTask实例代码演示Android异步任务 重绘TextView类演示Android的Handler Android的SoundPool类使用与利弊 AsyncTask解决Android UI堵塞问题 Android自定义View实例AnalogClock源码 Android UI开发专题(五) Bitmap和Canvas实例 Android UI开发专题(四) View自绘控件 Android UI开发专题(三) 各种Drawable 提高Android开发效率-Eclipse快捷键大全 Android UI开发专题(二) 之绘图基础 Android UI开发专题(一) 之界面设计 Only the original thread that created a view hierarchy can touch its views的相关 Android上的Back键事件捕获 Android蓝牙API之BluetoothSocket类(2) Android蓝牙API之BluetoothSocket类 Android蓝牙API之BluetoothAdapter类(1) Android蓝牙API之BluetoothAdapter类(2) AndroidManifest.xml文件剖析 (三) AndroidManifest.xml文件剖析 (二) AndroidManifest.xml文件剖析 (一) MOTODEV初体验,高效Android开发工具 Simple让BASIC语言编写Android程序 MOTODev试用报告- Android开发效率之源 安装MOTODEV Studio for Android版方法 Android开发工具-motoDEV studio介绍 Android过后Chrome OS又是如何开发? Android安全模型导致开发时功能受限 Android导出一个JAR库 APK汉化原理及方法 APK文件格式分析,Android反编译入门(一) ApiDemos中的Android Widget例子解析 今日郁闷之至……散分! 来来来,大伙们一起来衷心祝愿xxmm (晓箫)的老爸老妈顺利赴美参加晓箫的毕业典礼!! Dev-Cpp 使用 NetAPI32.lib 的问题 急寻严蔚敏,吴伟民版《数据结构习题集》c语言版的答案,请问哪有啊 高手们给我一个超级简单的HOOK API的例子好吗?求你们了。 错在哪里 好郁闷啊~ 谁有站内关键字模糊查询的代码?紧急求救、在线等待!!!! 字符串转化为数组的问题 讨论<<标准C++库大全>> 上次是哪位兄弟要的《新编API参考大全》CHM版呀?我找到了一个,还行。 欢迎大家访问我公司的网站! 请学c++builder 有份量的人推荐一本经典的教材(适合初学者) 欢迎大家访问我们公司的网址! 关于分页的问题 请帮我看看这个小程序 欢迎大家访问我公司的网站! 已知一个文件夹的路径,如何得到该文件夹中的文件的名字? 关于StreamReader的问题 欢迎大家访问我公司的网站! 有关编辑框的问题 各位大侠一个很菜的问题,来帮帮忙! 关于集合的一个小问题 最菜的问题,100分白送!!! 很基础问题,脑子不清楚,大家帮忙看看 紧急问题! 终于 知道MESSENGER 只是 WIN2K 的服务了! 那么 这 个怎么办?? 请问以下我如何实现一个带滚动条的子窗口 问一下,resin和iis集成后class文件放在什么目录下 用 http://www.rc80.com (c# + sqlserver2000) 只想换一个.net 的完整的分页代码! 一个Corba客户端连接的问题! 如何在resin中设置wap服务器功能 大家帮忙!! 什么时候用DataGrid,什么时候用DataList? 怎么样从数据库里取得某字段的值??? 昆腾的硬盘修理找谁啊?急,UP有分........ www.webmatrixhosting.net免费空间中FTP文件上传问题 Apache 2.0.43 +Tomcat 4.1.24+mod_jk2-2.0.43.dll整合问题出现:The servlet container is temporary unavailable or being upgraded 我装的Delphi7好像丢了一个文件:Proxies.pas,哪位好心人给我一个? 人,真脆弱! 开水房追女之呕心沥血计划 (超暴笑) 孤独 急!!Image对象如何设置成为透明的???Thanks! 【憋的慌】大头、阳光呢!!! 关于FLASHMX的遮罩问题 一个问题,想不通! 【憋的慌】死水、一辉呢!!! 急!!!急!!!怎么在建表时使用一个时间函数??就是指出加这条这条文件的时间?? 【憋的慌】蓝心、风呢!!! 怎么获得一个应用程序的图标,比如我用进程ID,获得其主模块,然后怎么办! 【憋的慌】冰冰、贝贝呢!!! Happy is the man who living by his hobby 中华鲟是什么类保护动物?看准“类” LED芯片包不包含衬底书上写的不明不白的 写的是衬底在芯片里 图里面却画在外面…… Happy is the man who is living by his hobby.happy是形容词,形容词怎么能做主语的? 中华鲟和白鳍豚是同一类动物吗? 三字经的全部内容 A man cannot really be happy if _he enjoys doing is ignored by society as of no value .A.what B.when C.that D.all what 为什么,求详解 Vanilla是什么意思? 三字经第八篇全部内容 first name vanilla custard是什么意思 谁能把《三字经》的全部内容给写一下.谢谢...有翻译的把翻译带上.谢谢...祝元旦快乐... “厨师”用英语怎么说?还要有音标英语 法语都行 I think English is ( ) than the other subjects,and I do ( )in it of allA more interesting;bestB much more interesting;well选哪个, 急需《三字经》里面的全部内容?如:人之初……等等的内容!有解释最好 .In that hotel,the bread and butter____served for breakfast ---the girl was too selfish and never thought of others,she wasn't getting on well with others.A thought B unless C since D until 《三字经》的内容有什么? ①当v增大时,所需向心力增大,即万有引力不足以提供向心力,卫星将做离心运动,脱离原来的圆轨道,轨道半径变大,但卫星一旦进入新的轨道运行,其运行速度要减小,但重力势能、机械能均增加 pen的意思 head the head the head the head the head the 离心运动,为啥万有引力小于向心力 She was a girl who knew how to be happy even when she was sad 的中文翻译 I do intend to live my life on the safe 求2013年的热点话题.热点! 根据黄金代换式我们知道重力=万有引力(忽略向心力),为什么还会有物体作离心运动?不是已经忽视向心力了 激光有哪些之最如:最快的“刀”,最准的“尺”,最大的“书” glue的中文 英语改错 A man cannot be really happy if that he enioys doing is ignored by society as of no value or importance 梯形ABCD中,AD∥BC∥EF,EF交AB、DC于E、F,交AC、BD于N、M,且M、N三等分EF,AD=2,BC=5,求EF的长如果有人能够在今天下午前回答正确的话,额外加高分. 以“我和我的祖国—喜迎国庆60周年”为题写征文征文主题“我和我的祖国—喜迎国庆60周年”以歌颂祖国和党,赞美社会和家乡发展变化(我是晋城的),表现人性真善美等为主要内容. Green,Jim,am,i,to,nice,meet,you连成句 life insurance policy go to something啥意思I also have a $10,000 life insurance policy that will go to the rabbits.前文说某人养了100多只兔子,导致生活入不敷出.然后说出这句话. 请问parfix glue 是什么意思?谢谢~~ 厨房门玻璃坏了怎么办 为寻找清洁能源用激光创造微型太阳 祖国60周年国庆作文最好带这60年来的进步脚步450字左右.好的追加20 to the best of our knowledge是什么意思 激光以什么为能源 glue的中文意思 中华鲟什么类动物A鱼类B两栖类 激光是啥? glue是什么意思? 中华鲟属于国家几级保护动物? 有一道题是这样的:已知m和n互为相反数,p和q互为倒数,a的绝对值是2,求m+n除以2007a 一只船顺水行320千米需用8小时,水流速度为每小时15千米,这只船逆水行这段路程需用几小时?320÷8-15 =25(千米) 25-15=10(千米)320÷10=32(小时) 这是答案它为什么减去一个15后又减一 用pen和not造句还要中文意思 安全帽承受压力好的性能是利用了什么原理 水流速度是每小时十五千米,现在有船顺水而行,八小时行320千米,若逆水行320千米需几小时?不用方程解. 张大伯家养了一些鸭和兔,鸭和兔一共有12个头,30只脚.张大伯家养了多少只鸭多少只兔? 半个乒乓球比一个完整的乒乓球承受的压力大对吗 水流速度是15km/时,现在有船顺水而行,8小时行了320千米,如果逆水行了320千米需要及时? 张大伯养了一些鸭和兔,鸭和兔一共有12个头,30只脚.张大伯养了多少只鸭,多少只兔?快哦.急. 2、安全帽之所以承受压力好,是因为它利用( )的原理. 某船在静水中的速度为x千米每小时,若水流的速度为y千米每小时,船逆水行了a小时,共行了 千米,这段路程某船在静水中的速度为x千米每小时,若水流的速度为y千米每小时,该船逆水行了a小时, PROTESTERS:"This is what democracy looks like!" MAHLON MITCHELL:"This is ground zero for the nati请问这两句话怎么翻译 三个乒乓球盖能承受1吨的压力吗 chickens in the 中华鲟为什么是一级保护动物 LED衬底分哪几种目前市面上主流的衬底分为三种,分别是蓝宝石,硅,碳化硅,据我了解,有些不是这种衬底,在此提问,以上三种是否只针对于长GAN,若长其它的,如发红光,会采用哪种衬底 李克强与三国总理会晤解析:中国外交布日本驻华大使:日中关系不是能够轻易被外媒:美国监听35国政要 重创美欧外唐家璇:松下35年前预言成现实 中日唐家璇:中日关系深层次原因在于彼此认第九届北京―东京论坛26日在北京开幕查尔斯不想当国王? 英媒爆王储担心被河南“猪蹄店要账横幅”事件:欠款已全英媒称斯诺登一机密文件披露美监听35中欧推动世贸组织在MC9上达成早期收福岛近海发生7.1级地震 最大观察到欧洲多国一致声讨美国监听事件 默克尔报效桑梓浙商情深 前三季浙商回归项目福岛近海发生7.1级地震 最大观察到马耳他总统阿贝拉会见杜青林我们与美国不得不重建信任巴西与德国要求联合国通过网络私密性决浙江民营经济隐现离制造业化 地产投资美国白宫变“粉宫” 呼吁关注乳腺癌(美国与沙特进入公开紧张状态 多重分歧四世同堂全家福广东佛山游客游泳池中打麻将(组图)全国安全生产宣传咨询日活动在各地广泛新北市长候选人 民进党、台联党6月底新通教育 第31届留学展周六开展台北副市长侯友宜:市政优先 全力支持吕秀莲:柯文哲若败选,蔡英文下台!你,爱过了吗看矿泉水瓶如何变成汽油以后跟垃圾“一路漏”说拜拜加多宝牵手腾讯达成全面战略合作观点摘编韩否认参与“河野谈话”俄开始试射超音速导弹让文化遗产活起来阮元和《新安县志》五方面推进基金业创新发展球迷喜网购零食 观看世界杯第三届深圳国际钢琴协奏曲赛开赛黑梅西还是梅西黑2014 2015年度“低碳竞赛”启来电照登
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘