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

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

【舌尖上的CTO】砂锅馄饨的交付件 微软新Visual Studio Code开发工具支持Mac和Linux 科技新创公司想做大?从CNN记者跳槽Snapchat谈起 Java二十年特别奉献:晒博文、赢大奖! 《近匠》华为创新总监蔡绪鹏:智能手表的三大感知与未解难题 从Samurai-Native框架开发谈React Native Qualcomm公司李申:Vuforia打破AR设备界线 物与物的互通:解析Thread、AllJoyn、OIC、Bonjour的特点 《天龙八部3D》中Unity使用介绍 微软推出ManifoldJS,Web App自动转成各平台本地App 专访庄晓丹:Java程序员眼中的Clojure 全面解析ECMAScript 6模块系统 七牛技术总监陈超:记Spark Summit China 2015 Project Tungsten:让Spark将硬件性能压榨到极限 Android手表在中国这样落地 ART运行时Foreground GC和Background GC切换过程分析 开创未来的关键:是什么造就了硅谷?(上) 微软前员工:开发Apple Watch应用的27个技巧 Apple Watch应用开发:从再造墨迹天气谈起 Java二十年特别策划:有奖征文,评选结果出炉! Zen=禅道:图解AMD技术战略转型 从友盟微社区看Android第三方SDK架构实践 无创客 不青春!2015全国大学生移动应用创新大赛在京启动 响应式Web开发,必懂媒体查询(系统理论+实战教程) 实例剖析:如何用Foundation For Apps创建完美Web应用 【舌尖上的CTO】兄弟肉夹馍的开发运维一体化 开创未来的关键:是什么造就了硅谷?(下) 安全漏洞影响2.5万iOS应用?AFNetworking维护者发布回应 《近匠》专访AbleCloud李海磊:IoT平台求变 腾讯、京东、微软等设计专家齐聚,探讨移动应用体验创新设计 TIOBE 2015年5月编程语言排行榜:微软系语言份额上升 无模对话框 我到底错在哪? 问一个很简单的问题?如何做一个链接到框架页! 这是不是病毒? 新作一系统需要用条形码输入,用asp.net作,需要与条形码输入器的硬件进行交流吗?条形码的硬件选用什么比较好?价格是多少? 请问各位大虾,那里有COM以及COLLECTION对象编程的文章和例程? 一个保存文件对话框的问题 一个很菜的问题,实在不会 sql语句怎么写? 关于服务器端和客户端通信的问题,急,请各位大虾帮忙 error LNK2001: unresolved external symbol "public: char __thiscall bcdtoasc::secondchar(char)" (?secondchar@bcdtoasc@@QAEDD@Z) 文本框的问题 关于 ACCESS 添加记录的问题? 为什么我在数据窗口中的sql语句中使用参数有错误?提示invalid和不完整! 在UNIX下如何编译C++程序 请教一个COM对象创建的问题 如何获取DropDownlist的SelectedItem.Text? lirun(笨笨狗)请进来领分 怎么得到数据库中的id值。 有点痛,不知道是什么病,大家帮忙看看 GOOGLE被中国"冷处理" 请介绍一本好一点的Winsock函数编程的书,电子书或者纸书都可以 关于全局CDatabase; mysqldump备份数据库时总是出错? 谁有http://211.100.6.72的源代码最好有附带的数据库连接说明。200 在2000server上安装oracle的问题,求教! 怎样深层理解delphi的类变量 数据库中日期范围怎么比较? 如何将Access的数据导入SQL-server 散分了,高手请进---.net不能够bug ???怎样在Delphi中对导出到Excel文件单元格进行划线???? 在VB中如何进行程序的数据输入有效性验证? 请上次回答我NT问题的同志进来拿分,上次只给了100 如何学winzip那样,在弹出菜单中增加一个新的项目 英国有好点的软件公司吗? 高分求救水晶报表问题? 从数据库中取最新的第10~第20条纪录的sql语句如何写啊?各位大侠帮忙啊 记录集问题 sco unix下可以运行tcpdump吗? 无法启动X,出现cound not init font path element unix:7100,removing from list...could not open default font 'fixed' 请问是否可以在VC++下编写一个声音程序,如何编写?(只要能发出一个或两个音符就可以了) 程序员今年还可以报吗? 在flash里面,用什麼命令,可以把gif變成矢量圖?? 怎么用TC编写一个显示320*240的16色位图的程序? 用什么函数可以得到msflexgrid的行号(row的值)? 请朋友们帮忙推荐几本PB8的关于B/S和三层结构编程的书 网上邻居的问题! 在ASP.NET中,控件好像不能被设置成控件数组,请高手回答 Word文章被锁定了! 非常奇怪的数据连接问题 乐晕了,散分! 什么口什么词组成什么词语 怎么求铁离子,硫酸根离子,硝酸根离子的个数比问题如下;溶液中含有镁离子,铁离子,硫酸根离子,硝酸根离子,其中铁离子,硫酸根离子,硝酸根离子的个数比3;3;1 请问人体血液内二氧化碳分压含量随年龄增长如何变化? 单能组成什么词 ZN和硫酸反应生成H2,加入NANO3和NA2SO4为什么速度不会加快,而CUSO4会加快?是因为ZN会和CU2+反应吗?而且CU2+的氧化性比H+强,那样的话H2是不是减少了? 女生长高的年龄段 为什么有机肥使用过多也会增加土壤中的硝酸盐含量?我是个新手,没什么可答谢的,只是诚恳的请教您, 圆形方孔铜钱与五株钱的区别 请问男人和女人,到底到什么年龄才正真停止长高了 做一个效果好的太阳能热水器,选择做集热器的材料最好是什么1·做一个效果好的太阳能热水器,选择做集热器的材料最好是( ).A.塑料 B.玻璃 C.金属 D.陶瓷 圆形方孔铜钱懂得进一个不认识的铜钱,怎么看怎么不知道是哪个朝代的,大师来看看 为什么有些人到某些年龄段.就会在很短的时间内长高很快. 请给这个长方形材料配两个圆,使它可以制成一个圆柱,选择什么样的圆?有几种不同的情况? 圆形方孔铜钱的重大影响快 男生长高的年龄可以到几岁? 求写一篇作文,叫身边的能人,范围很广,可以是家人,同学等等.老师要求写同学,我们班有一个女生叫陆倩,毛笔字和钢笔字写的都非常好,求大家举几个例子,就是描写她的字写得好体现在哪里,我 小明家有一块长方形铁皮,爸爸想利用这块铁皮做一个圆柱形的桶.为了不浪费铁皮,他应该选择第几号圆形铁长方形的长是 12.56 宽是 5.6 一号直径是2 二号直径4 三号直径是5 求清晰的解题思路. 圆形方孔铜钱的影响 这个词怎么来的? 一个两个字的词语七个字母的有多少重可能?一共有四个字,前面两个是爱情,后面两个字是七个字母的. 戴上电焊镜,当焊接时看不准焊口怎么办 下列物质中,不属于人的排泄废物的是:A尿液 B粪便C汗液D呼出的二氧化碳 分子式为CnH2n+2O的所有醚 手工焊接管道,水平对接固定口.315mm直径的管道,打底焊接和盖面.焊接角度摆动方法.和焊接电流 推力怎么�手工焊接管道,水平对接固定口.315mm直径的管道,打底焊接的焊接角度,运条方法和电 有谁知道的请快回答我啊 分子式为CnH2n+2O 的醇类有a种结构 而分子式为CnH2nO2 的羧酸类有b种结构则a和b的关系是A a>b B a=b 在地球上有哪些不是固态,液态和气态的东西? 女人在哪里小便 4个3mm白色发光二极管 + 2个3mm红色发光二极管并联 接3.7V 500mah锂电要接多大的电阻? 有什么东西在任何形态下(气态 液态 固态)都不导电 什么生肖是英雄 酸雨的主要成分是硫酸和硝酸,但是雷雨发庄稼,NO2溶于水生成硝酸,降落到土壤内形成硝酸盐被植物吸收这不是也是有好处的吗? 厨房里有什么东西是属于气态物质的?液态物质的?固态物质的? 世界上有多少名人伟人的生肖是属鼠的? 有5只杯口全部向上的杯子,每次将其中4只同时“翻转”,能不能经过若干次翻转,使杯口全部向下,为什么? 几种东西分固态、液态和气态空气 冰 水 铁块 干冰 水蒸气 酱油 牛奶 粉笔灰 熟鸡蛋 一代英豪的生肖是什么生肖 机制木炭是先炭化后成型吗? 谁知道人体产生的废物有哪些排出体外的途径?泌尿系统有哪些结构组成?尿是如何形成和排出的? 请问如果精子与卵子结合了,身体会有感觉么请问如果精子与卵子遇到了,身体会有感觉么 机制木炭怎样炭化 人体的废物主要以() 的形式通过()排出体外 急求诗词达人帮忙~~~~~朋友想追一女孩,让我替他作一首诗,诗最好是古典唯美一点的,其中要包含“文芬”二字!谢谢!不要现代诗啊~~~~~ 先炭化和先制棒两种工艺设备不同吗? 当大气压是101.3kpa,问位于水下面20m深处的绝对压力是多少? 自由自在 用来形容哪个生肖合适 自己的己可以组成什么词 当大气压为101.3kPa,问位于水面下20米深处的绝对压力是多少 取100mL 18.3mol/L的硫酸与Zn反应,当Zn完全溶解时,生成气体在标准状况下占有的体积为22.4L,将所得溶液将所得溶液稀释成1L,测得溶液的氢离子浓度为1mol/L,求所生成的气体中二氧化硫与氢气的 沽可以组成什么词? 什么是计量仪器检定 请问甲烷在200个大气压、100摄氏度下是什么形态,液体还是固体? “己” 可以组成几个词? 随着年龄增长身体发生了什么变化? 为了使低层住户的窗户全年都有阳光照射 深圳两幢居民之间的距离应依据()日的楼影来计算我急用 限在今天晚上做出来 2,2,3,3-四甲基戊烷与Cl2发生取代反应,生成的一氯代物有几种是与什么有关的 H原子个数? 随着年龄的增长人身体的力气是否随着变化? 月亮被太阳光照射的那面完全暴露出来,这一日,叫什么 H2SO3与,Zn反应,NaNO3固体加入后,生成H2的量是否改变,化学反应速率是否改变,如何改变 阿拉斯加雪橇犬成犬随着年龄的增长身体或毛会发生什么变化?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘