|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Combo API Obtaining the Combo Box Edit and List Handles on Win98/Win2000/WinXP |
||
Posted: | Thursday May 13, 1999 | |
Updated: | Monday December 26, 2011 | |
Applies to: | VB4-32, VB5, VB6 | |
Developed with: | VB6, Windows 98 | |
OS restrictions: | Win98, Windows 2000, Windows XP | |
Author: | VBnet - Randy Birch | |
Related: |
WM_CONTEXTMENU: Kill the Default Text Box Context Menu SendMessage: Make a Style-0 Combo Edit Read-Only FindWindowEx: Obtain Combo Box Edit Window Handle GetComboBoxInfo: Obtain Combo Box Edit and List Handles on Win98/NT5 |
|
Prerequisites |
Windows 98 or Windows 2000, Windows XP. |
|
Win98, Windows 2000 and Windows XP provide a new API providing extended combo box information. This page shows how to use this API to fulfill very popular requests - obtaining the handle to the Edit and List portions of a VB combo box. |
BAS Module Code |
None. |
|
Form Code |
Add a combo and two command buttons to a form, along with the following code: |
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Const CB_ADDSTRING = &H143 Private Const CB_SETITEMDATA = &H151 Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type COMBOBOXINFO cbSize As Long rcItem As RECT rcButton As RECT stateButton As Long hwndCombo As Long hwndEdit As Long hwndList As Long End Type Private Declare Function GetComboBoxInfo Lib "user32" _ (ByVal hwndCombo As Long, _ CBInfo As COMBOBOXINFO) As Long 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 Declare Function SetWindowText Lib "user32" _ Alias "SetWindowTextA" _ (ByVal hwnd As Long, _ ByVal lpString As String) As Long Private Sub Command1_Click() Dim hEdit As Long hEdit = GetComboEditHandle(Combo1) 'prove you got it by changing the combo text (style 0 only) Call SetWindowText(hEdit, "Hey! that's it .." & CStr(hEdit)) 'add the handle to the list... Call SendMessage(Combo1.hwnd, CB_ADDSTRING, _ 0&, ByVal "GetComboBoxInfo: Edit handle is " & CStr(hEdit)) End Sub Private Sub Command2_Click() Dim hList As Long hList = GetComboListHandle(Combo1) 'add the handle to the list... Call SendMessage(Combo1.hwnd, CB_ADDSTRING, _ 0&, ByVal "GetComboBoxInfo: List handle is " & CStr(hList)) hwndList = hList End Sub Private Function GetComboEditHandle(ctl As ComboBox) As Long Dim CBI As COMBOBOXINFO CBI.cbSize = Len(CBI) Call GetComboBoxInfo(ctl.hwnd, CBI) GetComboEditHandle = CBI.hwndEdit End Function Private Function GetComboListHandle(ctl As ComboBox) As Long Dim CBI As COMBOBOXINFO CBI.cbSize = Len(CBI) Call GetComboBoxInfo(ctl.hwnd, CBI) GetComboListHandle = CBI.hwndList End Function |
Comments |
Remember that GetComboBoxInfo is not present in Windows 95 or WinNT4. For those operating systems, you'll need to use the method detailed on the page FindWindowEx: Obtain Combo Box Edit Window Handle instead. The method there works with all operating systems tested thus far. |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |