|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||
| Visual Basic Combo API
Routines FindWindowEx: Obtain Combo Box Edit Window Handle |
||
| Posted: | Thursday May 13, 1999 | |
| Updated: | Monday December 26, 2011 | |
| Applies to: | VB4-32, VB5, VB6, and VB3, VB4-16 with appropriate declarations | |
| Developed with: | VB6, Windows 98 | |
| OS restrictions: | None | |
| 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 |
| None. |
|
|
This
method shows how you can obtain the handle to the edit portion of a combo box using the FindWindowEx API. Unlike the GetComboBoxInfo method
linked above, this method will work with all versions of Windows 95/98/NT4/2000/XP so far released.
As a further check against the handle returned, you could also add a call to GetClassName() and compare the return vale for the string "Edit" before using the handle. |
| BAS Module Code |
| None. |
|
|
| Form Code |
|
|
| Add a combo and a command button to a form using their default names, 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 Declare Function FindWindowEx Lib "user32" _
Alias "FindWindowExA" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) 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 hwndEdit As Long
'get the handle to the edit portion
'of the combo control
hwndEdit = FindWindowEx(Combo1.hwnd, 0&, vbNullString, vbNullString)
'prove you got it by changing its text (style 0 only)
Call SetWindowText(hwndEdit, "FindWindowEx found it!")
'add it to the list...
Call SendMessage(Combo1.hwnd, CB_ADDSTRING, _
0&, ByVal "FindWindowEx: Edit handle is " & CStr(hwndEdit))
End Sub
|
| Comments |
| Searching further using FindWindowEx will not obtain the handle to the List portion of the combo, because the parent of the list is the desktop, not the combo box. |
|
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |