首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

MSHFLEXGRID控件 用户更改列宽width时触发哪个事件?解决方法

2012-01-21 
MSHFLEXGRID控件 用户更改列宽width时触发哪个事件?如题??[解决办法]没有事件,需要用API以下代码是我曾经

MSHFLEXGRID控件 用户更改列宽width时触发哪个事件?
如题??

[解决办法]
没有事件,需要用API
以下代码是我曾经用过的,稍微改了改,缺点是只能监测到Mshflexgrid调整行高或者列宽,但是不能判定在调整哪一行哪一列

新建一个窗体Form1,添加一个MSHflexGrid1
代码:
Private Sub Form_Load()
Dim i As Long, j As Long
With MSHFlexGrid1
For i = 0 To .Cols - 1
.TextMatrix(0, i) = "第 " & i & "列 "
Next
End With
PrevProc = SetWindowLong(MSHFlexGrid1.hwnd, GWL_WNDPROC, AddressOf WindowProcNew)
End Sub

Public Sub AdjustColWidth(State As Long)
Select Case State
Case 0
Debug.Print "列宽、行高调整开始 "
Case 1
Debug.Print "列宽、行高调整中。。。 "
Case 2
Debug.Print "列宽、行高调整中结束 "
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong MSHFlexGrid1.hwnd, GWL_WNDPROC, PrevProc
End Sub

'=========================================
然后添加一个模块,以下代码:
Option Explicit

Public Declare Function GetWindowLong Lib "user32 " Alias "GetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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 Const GWL_WNDPROC = (-4)
Public PrevProc As Long

Private blnStart As Boolean
Public lngOldMsg As Long

Public Function WindowProcNew(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProcNew = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
'Debug.Print uMsg, wParam, lParam
If uMsg = 513 And lngOldMsg = 32 Then
blnStart = True
Call Form1.AdjustColWidth(0)
End If
If (uMsg = 512) And (lngOldMsg = 132) And (wParam = 1) And blnStart Then
Call Form1.AdjustColWidth(1)
End If
If uMsg = 512 And lngOldMsg = 132 And wParam = 0 And blnStart Then
blnStart = False
Call Form1.AdjustColWidth(2)
End If
lngOldMsg = uMsg
End Function

[解决办法]
这个过程有问题,
一运行 程序全部都自动关闭了!!!!
======================================
这段代码肯定没问题,测试好了才贴的
你新建一个工程,把代码粘贴上试试吧

热点排行