devxlogo

Get the handle of the edit portion of a ComboBox

Get the handle of the edit portion of a ComboBox

The ComboBox control contains an invisible Edit window, which is used for the edit area. In most cases you don’t need to access this inner control directly, but occasionally a direct control of that window can be useful. The first thing to do is get the handle of such inner Edit control, which you do with the following code:

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 LongDim editHWnd As LongeditHWnd = FindWindowEx(Combo1.hWnd, 0&, vbNullString, vbNullString)

Once you have the handle of the control, you can exploit all the usual low-level techniques, using API functions such as SendMessage, SetWindowLong, or subclassing. For example, you can force uppercase characters as follows:

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 LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _    (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _    (ByVal hwnd As Long, ByVal nIndex As Long) As LongConst GWL_STYLE = (-16)Const ES_UPPERCASE = &H8&Dim editHWnd As Long, style As Long' get the handle of the inner Edit controleditHWnd = FindWindowEx(Combo1.hwnd, 0&, vbNullString, vbNullString)' get its current Stylestyle = GetWindowLong(editHWnd, GWL_STYLE)' set the ES_UPPERCASE bitSetWindowLong editHWnd, GWL_STYLE, style Or ES_UPPERCASE

devx-admin

Share the Post: