ComboBox - Maintain Selecton on ComboBox (Hide When Lost Focus)

Category: Controls - .Techniques

Date: 03-28-2012

Return to Index


 
'Compilable Example:
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
#Include "win32api.inc"
%IDC_Combo = 500
%IDC_Button = 501
 
Global hDlg As Dword, OldComboProc&
 
Function PBMain() As Long
   Dim MyArray(3) As String
   Array Assign MyArray() = "zero item", "one item", "two item", "three item"
   Dialog New Pixels, 0, "ComboBox Test",300,300,200,200, %WS_OverlappedWindow, 0 To hDlg
   Control Add Button, hDlg, %IDC_Button, "Push", 20,10,150,25
   Control Add ComboBox, hDlg, %IDC_Combo, MyArray(), 20,40,75,100
   OldComboProc& = SetWindowLong(GetDlgItem(hDlg,%IDC_Combo), %GWL_WndProc, CodePtr(NewComboProc))
   ComboBox Select hDlg, %IDC_Combo, 1
   Dialog Show Modal hDlg Call DlgProc
End Function
 
CallBack Function DlgProc() As Long
   Local w,h As Long
   Select Case Cb.Msg
      Case %WM_Size
         Dialog Get Client hDlg to w,h
         Control Set Size hDlg, %IDC_Combo, w-40, 100
      Case %WM_InitDialog
         PostMessage GetDlgItem(hDlg,%IDC_Combo),%CB_SetEditSel, 0,3  'starting selection
      Case %WM_Destroy
         SetWindowLong GetDlgItem(hDlg,%IDC_Combo), %GWL_WNDPROC, OldComboProc&
   End Select
End Function
 
Function NewComboProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As LongAs Long
   Local iReturn As Long
   Select Case Msg
      Case %WM_GetDlgCode
         If lParam = %NULL Then
            iReturn = CallWindowProc(OldComboProc&, hWnd, MsgwParamlParam)
            Function = iReturn Xor %DlgC_HasSetSel
            Exit Function
         End If
   End Select
   Function = CallWindowProc(OldComboProc&, hWnd, MsgwParamlParam)   'send unprocessed messages to the original procedure
End Function
 
'gbs_00781
'Date: 03-10-2012


created by gbSnippets
http://www.garybeene.com/sw/gbsnippets.htm