我不是学VB的,有些地方不太懂,特来请教!
这是针对本窗口中的combobox的,如果想用于其它窗口,请自行修改mhwnd = Me.Combo1.hwnd这一句为合适的语句(提示,可利用findwindow结合findwindowex获得combobox句柄):
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Long, lparam As Any) As Long
Private Const WM_COMMAND = &H111
Private Const CBN_SELCHANGE = 1
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Combo1_Click() '测试,针对vb,CBN_SELCHANGE这条消息会生成combobox的click事件
MsgBox "aaa"
End Sub
Private Sub Command1_Click()
Dim mhwnd As Long
Dim ctrlid As Long
mhwnd = Me.Combo1.hwnd
ctrlid = GetDlgCtrlID(mhwnd)
Dim wparam As Long, lparam As Long
wparam = CBN_SELCHANGE * 2 ^ 16 + ctrlid
lparam = mhwnd
Dim phwnd As Long
phwnd = GetParent(mhwnd)
SendMessage phwnd, WM_COMMAND, wparam, ByVal lparam '这里不懂
End Sub
Private Sub Form_Load()
Dim i As Long
For i = 1 To 20
Combo1.AddItem "line " + CStr(i)
Next
End Sub
这是针对本窗口中的combobox的,如果想用于其它窗口,请自行修改mhwnd = Me.Combo1.hwnd这一句为合适的语句(提示,可利用findwindow结合findwindowex获得combobox句柄):
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Long, lparam As Any) As Long
Private Const WM_COMMAND = &H111
Private Const CBN_SELCHANGE = 1
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Combo1_Click() '测试,针对vb,CBN_SELCHANGE这条消息会生成combobox的click事件
MsgBox "aaa"
End Sub
Private Sub Command1_Click()
Dim mhwnd As Long
Dim ctrlid As Long
mhwnd = Me.Combo1.hwnd
ctrlid = GetDlgCtrlID(mhwnd)
Dim wparam As Long, lparam As Long
wparam = CBN_SELCHANGE * 2 ^ 16 + ctrlid
lparam = mhwnd
Dim phwnd As Long
phwnd = GetParent(mhwnd)
SendMessage phwnd, WM_COMMAND, wparam, ByVal lparam '这里不懂
End Sub
Private Sub Form_Load()
Dim i As Long
For i = 1 To 20
Combo1.AddItem "line " + CStr(i)
Next
End Sub
在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务
CBN_SELCHANGE*2^16+ctrlid
到底告什么 我不太清楚
是个常数
比如,CBN_SELCHANGE*2是长整型乘2,而再加上^16是什么意思呢?
CBN_SELCHANGE * 2 ^ 16
CBN_SELCHANGE*2^16+ctrlid
这就是让你把CBN_SELCHANGE ctrlid 组合成一个DWORD
比如CBN_SELCHANGE = &h1234&
ctrlid=&h5678&
那么这个值就是 &h12345678&