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

显示窗口的水平和垂直滚动条-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就当掉了.

展望2013 jQuery核心团队成员谈其发展路线 Facebook社交视觉搜索分析:引入“竞价排名”? 移动广告现状5大问题解析 Google将于月底举行Google Glass开发者大赛 分享29个超赞的响应式Web设计 Facebook图谱搜索和谷歌搜索有何不同? Facebook向美国iPhone用户提供免费电话 VMware CTO Steve Herrod离职 加盟风险投资公司 维基百科基金会推出众包旅游项目Wikivoyage 最舒适程序员:工作外包给中国 自己却偷懒 Evernote正在与苹果联合开发硬件记忆工具,未来两年公司上市 Fusion-io发布ioScale 全闪存数据中心时代到来? Agent Dash游戏设计之美:如何用2D打造3D体验? 开源项目文档应规避的13处“硬伤” 李开复:Graph Search将可与谷歌搜索媲美 月成本3500美元 如何在AWS上实现BBVA信用卡低延时分析 外媒眼中的国内互联网巨头:服务器集群庞大但缺乏创新 Facebook主导通用主板+SoC ARM与Intel同台对抗 假如像招聘程序员那样租车…… CrowdStar:Windows Phone 8是开发者的下一片蓝海 腾讯云总经理陈磊透露流量变现计划 将比亚马逊AWS更专注 代码之美——Doom3源代码赏析 英特尔公布2012财年财报 Q4净利润同比下滑27% 谷歌CEO佩奇:创新重于竞争 关注非增量改进 再尝败绩 微软杀软AV-TEST反病毒认证失败 财富:2013最佳雇主 谷歌第一微软75苹果未入榜 移动应用注册表单必死! 数据:2012年的全球互联网知多少 访中粮我买陈伟伟:高并发大压力挑战架构师极限 左路Deep Learning+右路Knowledge Graph,谷歌引爆大数据 数据库排行榜:关系型居首,NoSQL整体人气最高 新手求教:请问怎么可以把含逗号(如:sa,ffd,sdf)的字符串从逗号处分开,变成独立的几个字串sa ffd sdf? 急!请问如何在程序启动时自动检测MODEM?能给出CODE最好。 如何在unix上远程安装软件 KeyPress事件处理疑问 TComboBox能不能有OnMouseDown事件??? 请教哪里有付费便宜、性能稳定、访问速度快的支持ACCESS、ASP的空间? 加载不了*.ocx控件是怎么回事? 我的CStatic上为什么不能贴位图? 主页何为佳? 偶用ultradev,在table里绑定字段,并作了重复区域的设置,但是live data 的结果总是一列纪录出现在一个单元格里,而且只有第一个单元格里有数据,其他是空的,怎么回事?//牛虻 ClassView Information file如何恢复,急,知道的朋友望告之! 500分求一好用的代理服务器,能访问www.creaders.net这样的网站(按:贴太多结不了,无法在水园发贴,烦版主转到水园) 各位高手,我的分发光了,问题还没解决。帮帮我好吗 请问什么叫专家分..怎样得到专家分,你们的专家分都有多少...有超过1000的吗 -->> sql语句中求和问题. 急急急急!!!,请教一个VB中SQL语言的问题!!! 请教关于数据代入的问题 我们公司把qq给封了,好着急啊,谁知道有什么办法?送分啊~~` 俺要怎么办? 怎样得到DBGrid 中某一单元格的Focus,因为我要处理这样的问题,在DBGrid中输入的数据如果不正确,则focus不能离开此单元格。 VB中的Byte型数据在PB中是什么类型? 动了枪的青马 在sco unix 5.05的分区问题 help! where could I download NT serve pack 6.0 那位高手知道在solaris编程中,如何在按钮上加载图片? 我怎样发布自己的servlet 怎样确定对象类图的中类? 可以帮我解决一个关于linux的问题吗? 熟悉文件操作的高手请进来坐一下。 +++++++关于MS SQL SERVER2000的注册服务器问题+++++ 考过scjp的进去看一眼 请问DTD是不是将要为XML Schema所代替???现在主要哪一个呢? XiaoFang(奇奇) 你在哪里,十分感谢,再送100分! 关于输入框中输入空字符串的判断 zork(我是一条鱼……) 说明白些呀,用http代理怎么上qq? HK的书店 求教:关于CRC校验的问题 问题:有关查询结果排序. 为什么我用的是LoadString函数而编译显示错误时显示LoadStringW函数。两个有什么区别? 请问这个错误提示是什么意思呢?谢谢! OCI中的类型转换 麻烦大家看看下面的代码对吗?能否用MSChart显示MSHFlexGrid中指定的行(上下)和列(左右),谢谢谢谢 如何用vector做一个二维数组。如int a[4][4]的。该怎么做 仰天长笑,号称CSDN(“中国”软件开发网),却。。。 鼠标移出当前窗口时显示MessageBox如何做? 操作系统为solaris如何配置才能上internet网? 大虾留步! 根据日期查询数据库的问题(当天结账)急! 请问怎么去打开一个SQL SERVER的数据库,求救 怎样修改注册表? 1.若x^m•x^2m=2,求x^9m的值.2,若(9^m+1)^2=3^16,求正整数m.1.若x^m•x^2m=2,求x^9m的值.2,若(9^m+1)^2=3^16,求正整数m.在6点之前写好, 不等式{mx方+2(m+1)+9m+4}分之{x方-8x+20}<0的解集为R,求实数m的取值范围 完全中和某一强酸溶液,需用10克溶质质量分数为5.6%的KOH溶液.如果改用10克溶质质量分数为5.6%的NaOH溶液,反应后溶液的PH A大于7 B小于7 C等于7 D无法判断要有解析,解析,解析,答案说了没用 2m^3-9m^2+6m-1=0中m的解 若不等式(x^2-8x+20)/(mx^2+2(m+1)x+9m+4)>0对一切x属于R,求实数m的取值范围? 2.9152保留两位小数 化简 m^2-2m^3+3/2m^2-1/2m+1/16 0.01356356.它的循环节是356,可以怎么简写 2.045保留一位小数不记得怎么算了..0.615502化为百分数(保留一位小数) 数学几何画图题如图,某市有一块三条马路围成的三角形绿地,现准备在其中建小花坛,为了美观使花坛中心到三条马路的距离相等,请在图中标出花坛的中心位置,并写出作法 0.01258258···是()小数,可简写成(),保留三位小数是(). 2.487保留一位小数得多少? 数学平面几何绘图画平面几何的图形时,图形角上的字母怎么标?用什么工具最好~比如说 矩形ABCD 这个矩形四个角的字母怎么打上? 0.45353.可简写成( ),它的循环节是( ),它是( )循环小数. 不等式mx2+2(m+1)x+9m+4 你能告诉我他回来了吗?怎么划分主谓宾?主要是“我”是什么成分? “这是一本新书”请指出主谓宾 英语的主谓宾和汉语的主谓宾有什么区别吗? 数学:平面几何作图题已知三角形的三个分角线为ta,tb,tc求作此三角形.第一个回答没有图,也没说明符号,看不明白. 学习了小数的性质后,一般都要把小数简写,但是像3角=( )元,是写0.3元呢还是0.30元 如何辨别语文的:主谓宾丁壮补 帮我划分一下 主谓宾 等等.(详细划分)1.我在大学念书.2.我正在看电视.请帮我 帮我划分一下 主谓宾,具体划分一下.帮我这个也划分一下. 啥叫主啥叫谓啥叫宾...俺农村来滴..搞不懂>_那能不能稍微多据点例子..这个我也知道.0.0 主谓宾定状补分别由什么构成 数学几何题,图画的不好,请见谅(1)已知:如图,若∠EDB=∠ABD,请你指出图中哪两条线段平行.(2)已知:如图,AD//BC,DF//BF,请你说明∠1=∠2.(3)已知:如图,AD//BC,∠1=∠2,请你说明DF//BE修正:DF/ 关于语文的主谓宾.怎么理解语文里的主谓宾.文言文里的. 怎样辨别用地沟油炒过的菜 请问如何划分此句的主谓宾?boys and girls ,let's go to school.一定要说出let在句中做什么成份! 语文的主谓宾中 主语前面是什么语 还有谓语和宾语呢?主语前好像是定语什么的请认真回答 一个两位小数保留一位后是2.4,这个两位数最大是多少,最小是多少 1 是啊,有一年了吧!2 您身体怎么样?3 他给了我书. 语文主谓宾划段开展这项活动,要做好激发鼓动工作.注:符号主语下划双横线,谓语下划单横线,宾语下滑波浪线,补语打,定语打(), 一个两位小数保留一位小数后的7.4,这两位小数最大是多少,最小是多少 主谓宾划分Is this shirt Tim's?我是初学者,这句话的句子成分怎么划啊?下面的这么说跟上面的意思一样吗?Is this Tim's shirt? 初三科学试题1.近年来时兴一种“蹦极跳”游乐项目,即脚部用弹性绳系着,然后头朝下从高空(高架或高的桥梁等)跳下,感受人体从高空自由坠落的刺激.(注意,此项活动只能在国家批准的场所进 初三科学题,高手进某同学为了向同班同学证明“声音在空气中传播时,是依靠空气的振动来实现的”这一结论,设计了以下4个实验,哪个最合理?(答案B,我认为是D)A.在长的钢管一端敲一下,在 根号10的整数部分是a,则小数部分为? .如图所示,与传送带等高的光滑水平台上有一小物块以某一初速度滑上传送带.若传送带静止时,物块离开传送带后落在地上P点,若传送带顺时针匀速转动时,则物块将落在A.P点 B.P点或P点的 科学题.在盛有盐酸的试管中滴入几滴硝酸银溶液,会看到什么景象?然后再往试管中滴入几滴硝酸,震荡后,发现_______我要知道原因 若a,b分别表示根号10的整数部分和小数部分,求a+(1/b+4)的值 热敏电阻是一种电阻值随温度的变化而改变,且对温度很敏感的电阻.下图甲是通过某热敏电阻的电流与两端的电压关系图象.小亮同学将此电阻接入如图乙所示电路,若电源电压为8V,电流表 如题初三科学有两段阻值相同的电热丝,将它们串联在某电源两段加热一壶凉水,10分钟可烧开,若并联,则需要几分钟. 从下列物质中选择适当物质,按要求完成(1)-(3)有关反应的化学方程式(产物可利用):石灰石,锌,氯化铜,盐酸,水(1)制取单质铜(2)制取熟石灰(3)制取二氧化碳... 初三的科学题目(选择题)相同质量的碳酸钙 碳酸镁 碳酸钠 碳酸氢钠分别与足量的盐酸反应 都生成二氧化碳 其中产生想同的是哪一组a 碳酸镁和碳酸氢钠 b 碳酸钙和碳酸钠c 碳酸钙 和 语文的真正内涵是什么 (化学方程式)市售紫葡萄的表面上常附有一些浅蓝绿色的斑点,它是为了防治霉菌而喷洒的农药波尔多液.波尔多液可由硫酸铜溶液与石灰水混合而制得(配制时不能使用铁制容器,因为硫 9m-2n=3和4n+m=-1这个方程住的解是? 要m和n的值,要过程 谢谢 谢谢 1、第一个字为拼音字母D开头的俗语有什么?例如:当局者迷,旁观者清.2、第一个字为拼音字母E开头的俗语有什么?例如:二人同心,其利断金. 科学 初三 化学方程式用石灰浆粉刷过的墙壁,刚开始时会“冒汗”在敞口放置一段时间的氢氧化钠溶液中滴加足量稀盐酸,产生气泡 高次方程m⁴+4m³+2m²-9m=0怎么解? 语文是怎样定义的? 若不等式x2-8x+20/mx2+2(m+1)x+9m+4 3.8215 保留整数 保留一位小数 保留两位小数 趣味语文故事要长些的 不等式mx2+2(m+1)x+9m+4分之x2-8x+20小于0的解集为R,求实数m的取值范围 地沟油炒菜后怎么鉴别饭店傻子啊,让你进去看,消费者只能从端上来的菜判断.我中午的一个菜,冷了以后,有一些像果冻一样的胶体,但是灰色的,是那些水和油冷了以后变成这样的.我自己家的 要考趣味语文,没头绪,知道者请详情 若不等式X2-8X+20/MX2+2(M+1)X+9M+4>0对一切X属于R,求实数M的取值范围 要区别碳酸钠、氯化钠、硫酸、氢氧化钠、氢氧化钡五种物质的水溶液,至少还需要其他试剂 A、0种 B、1种 C、2种 D、3种 9m+8n=-25是1式,6m-3n=0是2式,请解式
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn