能否通过API设置MSHFlexGrid的滚动条为平滑并且改变滚动条的颜色?

progame 2003-06-12 08:53:19
.
...全文
153 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihonggen0 2003-06-12
  • 打赏
  • 举报
回复
FlatSB_SetScrollProp 就是这个API函数!

Sets the properties for a flat scroll bar.

你运行我最上面的代码看看!需要改的,自己改改就行了!

-------------------------------------------
to progame()
你又在写控件了?我看过你写的打印控件,挺不错!
progame 2003-06-12
  • 打赏
  • 举报
回复
不太好控制啊 是否可见 还有位置等信息
progame 2003-06-12
  • 打赏
  • 举报
回复
不要很多功能 我只要平滑就行了
lihonggen0 2003-06-12
  • 打赏
  • 举报
回复

不过我认为自已做比较好
将mshflexgrid的滚动条设为none
用picturebox模拟可以实现很多功能,而且简单!



lihonggen0 2003-06-12
  • 打赏
  • 举报
回复
主要使用以下API:

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function InitializeFlatSB Lib "comctl32" (ByVal hWnd As Long) As Long
Private Declare Function UninitializeFlatSB Lib "comctl32" (ByVal hWnd As Long) As Long
Private Declare Function FlatSB_SetScrollProp Lib "comctl32" (ByVal hWnd As Long, ByVal index As Long, ByVal newValue As Long, ByVal fRedraw As Boolean) As Boolean
Private Declare Function FlatSB_EnableScrollBar Lib "comctl32" (ByVal hWnd As Long, ByVal wSBflags As Long, ByVal wArrows As Long) As Long
Private Declare Function FlatSB_GetScrollInfo Lib "comctl32" (ByVal hWnd As Long, ByVal fnBar As Long, lpsi As SCROLLINFO) As Boolean
Private Declare Function FlatSB_GetScrollProp Lib "comctl32" (ByVal hWnd As Long, ByVal index As Long, pValue As Long) As Boolean
Private Declare Function FlatSB_GetScrollRange Lib "comctl32" (ByVal hWnd As Long, ByVal code As Long, lpMinPos As Long, lpMaxPos As Long) As Boolean
Private Declare Function FlatSB_SetScrollInfo Lib "comctl32" (ByVal hWnd As Long, ByVal fnBar As Long, lpsi As SCROLLINFO, ByVal fRedraw As Boolean) As Long
Private Declare Function FlatSB_SetScrollPos Lib "comctl32" (ByVal hWnd As Long, ByVal code As Long, ByVal nPos As Long, ByVal fRedraw As Boolean) As Long
Private Declare Function FlatSB_SetScrollRange Lib "comctl32" (ByVal hWnd As Long, ByVal code As Long, ByVal nMinPos As Long, ByVal nMaxPos As Long, ByVal fRedraw As Boolean) As Long
Private Declare Function FlatSB_ShowScrollBar Lib "comctl32" (ByVal hWnd As Long, ByVal code As Long, ByVal fShow As Boolean) As Boolean
Private Declare Function FlatSB_GetScrollPos Lib "comctl32" (ByVal hWnd As Long, ByVal code As Long) As Long
lihonggen0 2003-06-12
  • 打赏
  • 举报
回复
Const GWL_STYLE = (-16)

Const WSB_PROP_VSTYLE = &H100
Const FSB_FLAT_MODE = 2
Const FSB_ENCARTA_MODE = 1
Const FSB_REGULAR_MODE = 0

Const SB_HORZ = 0
Const SB_VERT = 1
Const SB_BOTH = 3

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function InitializeFlatSB Lib "comctl32" (ByVal hWnd As Long) As Long
Private Declare Function UninitializeFlatSB Lib "comctl32" (ByVal hWnd As Long) As Long
Private Declare Function FlatSB_SetScrollProp Lib "comctl32" (ByVal hWnd As Long, ByVal index As Long, ByVal newValue As Long, ByVal fRedraw As Boolean) As Boolean
Private Sub Form_Activate()
'Initialize
InitializeFlatSB MSHFlexGrid1.hWnd
FlatSB_SetScrollProp MSHFlexGrid1.hWnd, WSB_PROP_VSTYLE, FSB_ENCARTA_MODE, True
End Sub
Private Sub Form_Load()
Dim Ret As Long
Dim I, J As Integer
MSHFlexGrid1.Cols = 10
MSHFlexGrid1.Rows = 20
For I = 1 To 9
For J = 1 To 19
MSHFlexGrid1.TextMatrix(J, I) = J & "行" & I & "列"
Next
Next I

Ret = GetWindowLong(MSHFlexGrid1.hWnd, GWL_STYLE)
Ret = Ret Or WS_VSCROLL Or WS_HSCROLL
SetWindowLong MSHFlexGrid1.hWnd, GWL_STYLE, Ret

End Sub
Private Sub Form_Unload(Cancel As Integer)
UninitializeFlatSB MSHFlexGrid1.hWnd
End Sub


newste 2003-06-12
  • 打赏
  • 举报
回复
up
nik_Amis 2003-06-12
  • 打赏
  • 举报
回复
up
rappercn 2003-06-12
  • 打赏
  • 举报
回复
肯定可以,但是我还不会,帮你顶一下。
progame 2003-06-12
  • 打赏
  • 举报
回复
..
progame 2003-06-12
  • 打赏
  • 举报
回复
up
rappercn 2003-06-12
  • 打赏
  • 举报
回复
能不能突破400,000的cell个数限制?
是用VB+ComboBox+Command+TextBox写的吗?
progame 2003-06-12
  • 打赏
  • 举报
回复
在写一个可以编辑的网格控件

http://jinesc.6600.org/bbs/disp.asp?idd=47177&room=111

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧