home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Improved_C2066265182007.psc / ComboBoxEx32 / modComboBoxEx.bas < prev    next >
BASIC Source File  |  2007-05-16  |  29KB  |  701 lines

  1. Attribute VB_Name = "modComboBoxEx"
  2. ' ======================================================================================
  3. ' Name:     modComboBoxEx.bas
  4. ' Author:   Joshy Francis (joshylogicss@yahoo.co.in)
  5. ' Date:     3 March 2007
  6. '
  7. ' Requires: None
  8. '
  9. ' Copyright ⌐ 2000-2007 Joshy Francis
  10. ' --------------------------------------------------------------------------------------
  11. 'The implementation of ComboBoxEx in VB.All by API.
  12. 'you can freely use this code anywhere.But I wants you must include the copyright info
  13. 'All functions in this module written by me.
  14. ' --------------------------------------------------------------------------------------
  15. 'No updates.This is the first version.
  16. 'I Just included comments on every important lines.Sorry for my bad english.
  17. 'I developed this program by converting the C Documentation to VB and experiments with VB.
  18. 'You can improve this program by your experiments.I didn't done all parts of the
  19. 'ComboBoxEx.
  20.  
  21. Option Explicit
  22.  
  23. Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
  24. Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
  25. Public Const WS_BORDER = &H800000
  26. Public Const WS_CAPTION = &HC00000                  '  WS_BORDER Or WS_DLGFRAME
  27. Public Const WS_CHILD = &H40000000
  28. Public Const WS_CLIPCHILDREN = &H2000000
  29. Public Const WS_CLIPSIBLINGS = &H4000000
  30. Public Const WS_DISABLED = &H8000000
  31. Public Const WS_DLGFRAME = &H400000
  32. Public Const WS_EX_ACCEPTFILES = &H10&
  33. Public Const WS_EX_DLGMODALFRAME = &H1&
  34. Public Const WS_EX_NOPARENTNOTIFY = &H4&
  35. Public Const WS_EX_TOPMOST = &H8&
  36. Public Const WS_EX_TRANSPARENT = &H20&
  37. Public Const WS_GROUP = &H20000
  38. Public Const WS_HSCROLL = &H100000
  39. Public Const WS_MAXIMIZE = &H1000000
  40. Public Const WS_MAXIMIZEBOX = &H10000
  41. Public Const WS_MINIMIZE = &H20000000
  42. Public Const WS_MINIMIZEBOX = &H20000
  43. Public Const WS_OVERLAPPED = &H0&
  44. Public Const WS_POPUP = &H80000000
  45. Public Const WS_SYSMENU = &H80000
  46. Public Const WS_TABSTOP = &H10000
  47. Public Const WS_THICKFRAME = &H40000
  48. Public Const WS_VISIBLE = &H10000000
  49. Public Const WS_VSCROLL = &H200000
  50. Public Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)
  51. Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
  52. Public Const WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
  53. Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  54. Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
  55. Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wparam As Long, ByVal lParam As Long) As Long
  56. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  57. Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  58. Public Const GWL_HINSTANCE = (-6)
  59. Public Const GWL_EXSTYLE = (-20)
  60. Public Const GWL_HWNDPARENT = (-8)
  61. Public Const GWL_ID = (-12)
  62. Public Const GWL_STYLE = (-16)
  63. Public Const GWL_USERDATA = (-21)
  64. Public Const GWL_WNDPROC = (-4)
  65. Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Long, ByVal lParam As Long) As Long
  66. Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Long, lParam As Any) As Long
  67. Public Declare Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long
  68. Public Type WNDCLASS
  69.     style As Long
  70.     lpfnwndproc As Long
  71.     cbClsextra As Long
  72.     cbWndExtra2 As Long
  73.     hInstance As Long
  74.     hIcon As Long
  75.     hCursor As Long
  76.     hbrBackground As Long
  77.     lpszMenuName As String
  78.     lpszClassName As String
  79. End Type
  80. Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  81. Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
  82. Public Const CS_BYTEALIGNCLIENT = &H1000
  83. Public Const CS_BYTEALIGNWINDOW = &H2000
  84. Public Const CS_CLASSDC = &H40
  85. Public Const CS_DBLCLKS = &H8
  86. Public Const CS_HREDRAW = &H2
  87. Public Const CS_INSERTCHAR = &H2000
  88. Public Const CS_KEYCVTWINDOW = &H4
  89. Public Const CS_NOCLOSE = &H200
  90. Public Const CS_NOKEYCVT = &H100
  91. Public Const CS_NOMOVECARET = &H4000
  92. Public Const CS_OWNDC = &H20
  93. Public Const CS_PARENTDC = &H80
  94. Public Const CS_PUBLICCLASS = &H4000
  95. Public Const CS_SAVEBITS = &H800
  96. Public Const CS_VREDRAW = &H1
  97.  
  98. Public Enum ComCtlClasses
  99.      ICC_LISTVIEW_CLASSES = &H1      ' listview, header
  100.      ICC_TREEVIEW_CLASSES = &H2       ' treeview, tooltips
  101.      ICC_BAR_CLASSES = &H4            ' toolbar, statusbar, trackbar, tooltips
  102.      ICC_TAB_CLASSES = &H8            ' tab, tooltips
  103.      ICC_UPDOWN_CLASS = &H10          ' updown
  104.      ICC_PROGRESS_CLASS = &H20        ' progress
  105.      ICC_HOTKEY_CLASS = &H40          ' hotkey
  106.      ICC_ANIMATE_CLASS = &H80         ' animate
  107.      ICC_WIN95_CLASSES = &HFF        '
  108.      ICC_DATE_CLASSES = &H100         ' month picker, date picker, time picker, updown
  109.      ICC_USEREX_CLASSES = &H200       ' comboex
  110.      ICC_COOL_CLASSES = &H400         ' rebar (coolbar) control
  111.     #If (WIN32_IE >= &H400) Then    '
  112.          ICC_INTERNET_CLASSES &H800
  113.          ICC_PAGESCROLLER_CLASS &H1000       ' page scroller
  114.          ICC_NATIVEFNTCTL_CLASS &H2000       ' native font control
  115.     #End If
  116. End Enum
  117. Public Type INITCOMMONCONTROLSEX
  118.     dwSize As Long 'DWORD ;             // size of this structure
  119.     dwICC As ComCtlClasses 'Long 'DWORD ;              // flags indicating which classes to be initialized
  120. End Type '} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
  121.  
  122. Public Declare Function INITCOMMONCONTROLSEX Lib "COMCTL32.DLL" Alias "InitCommonControlsEx" (ICCClass As INITCOMMONCONTROLSEX) As Long 'Boolean
  123. Public Type NMHDR
  124.   hwndFrom As Long   ' Window handle of control sending message
  125.   idFrom As Long        ' Identifier of control sending message
  126.   code  As Long          ' Specifies the notification code
  127. End Type
  128. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  129. Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  130. Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  131. Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  132. Public Declare Function UpdateWindow Lib "user32" (ByVal hwnd As Long) As Long
  133. Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Any, ByVal bErase As Long) As Long
  134.  
  135. Private Const WM_NOTIFY = &H4E
  136. Private Const WM_DESTROY = &H2
  137. Public Const WM_CREATE = &H1
  138.  
  139. Public Const WM_LBUTTONDOWN = &H201
  140. Public Const WM_MOUSEMOVE = &H200
  141. Public Const WM_LBUTTONDBLCLK = &H203
  142. Public Const WM_LBUTTONUP = &H202
  143. Public Const WM_MBUTTONDBLCLK = &H209
  144. Public Const WM_MBUTTONDOWN = &H207
  145. Public Const WM_MBUTTONUP = &H208
  146. Public Const WM_RBUTTONDBLCLK = &H206
  147. Public Const WM_RBUTTONDOWN = &H204
  148. Public Const WM_RBUTTONUP = &H205
  149. Public Const WM_KEYDOWN = &H100
  150. Public Const WM_KEYUP = &H101
  151.  
  152. Public Const WM_SETREDRAW = &HB
  153. Public Const WM_USER = &H400
  154.  
  155. Public Type POINTAPI
  156.         x As Long
  157.         y As Long
  158. End Type
  159.  
  160. Public Const CCM_FIRST = &H2000                    ' Common control shared messages
  161. Public Const CCM_SETUNICODEFORMAT = (CCM_FIRST + 5)
  162. Public Const CCM_GETUNICODEFORMAT = (CCM_FIRST + 6)
  163. '
  164. 'Public Type NMHDR
  165. '  hwndFrom As Long   ' Window handle of control sending message
  166. '  idFrom As Long        ' Identifier of control sending message
  167. '  code  As Long          ' Specifies the notification code
  168. 'End Type
  169.  
  170.  
  171. ''''''''''  ComboBoxEx ''''''''''''''''
  172.  
  173. 'Public Const WC_COMBOBOXEXW         L"ComboBoxEx32"
  174. Public Const WC_COMBOBOXEXA = "ComboBoxEx32"
  175. '
  176. '#ifdef UNICODE
  177. 'Public Const WC_COMBOBOXEX          WC_COMBOBOXEXW
  178. '#Else
  179. Public Const WC_COMBOBOXEX = WC_COMBOBOXEXA
  180. '#End If
  181.  
  182. Public Const CBEIF_TEXT = &H1
  183. Public Const CBEIF_IMAGE = &H2
  184. Public Const CBEIF_SELECTEDIMAGE = &H4
  185. Public Const CBEIF_OVERLAY = &H8
  186. Public Const CBEIF_INDENT = &H10
  187. Public Const CBEIF_LPARAM = &H20
  188.  
  189. Public Const CBEIF_DI_SETITEM = &H10000000
  190.  
  191. Public Type COMBOBOXEXITEMA 'tagCOMBOBOXEXITEMA
  192. mask As Long '    UINT mask;
  193. iItem   As Long '    int iItem;
  194. pszText As String '    LPSTR pszText;
  195. cchTextMax  As Long '    int cchTextMax;
  196. iImage    As Long '   int iImage;
  197. iSelectedImage    As Long '    int iSelectedImage;
  198. iOverlay     As Long '  int iOverlay;
  199.  iIndent    As Long ' int iIndent;
  200. lParam    As Long '  LPARAM lParam;
  201. '} COMBOBOXEXITEMA, *PCOMBOBOXEXITEMA;
  202. 'typedef COMBOBOXEXITEMA CONST *PCCOMBOEXITEMA;
  203. End Type
  204.  
  205. 'Public Type tagCOMBOBOXEXITEMW
  206. '    UINT mask;
  207. '    int iItem;
  208. '    LPWSTR pszText;
  209. '    int cchTextMax;
  210. '    int iImage;
  211. '    int iSelectedImage;
  212. '    int iOverlay;
  213. '    int iIndent;
  214. '    LPARAM lParam;
  215. '} COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW;
  216. 'typedef COMBOBOXEXITEMW CONST *PCCOMBOEXITEMW;
  217. '
  218. '#ifdef UNICODE
  219. 'Public Const COMBOBOXEXITEM            COMBOBOXEXITEMW
  220. 'Public Const PCOMBOBOXEXITEM           PCOMBOBOXEXITEMW
  221. 'Public Const PCCOMBOBOXEXITEM          PCCOMBOBOXEXITEMW
  222. '#Else
  223. 'Public Const COMBOBOXEXITEM = COMBOBOXEXITEMA
  224. 'Public Const PCOMBOBOXEXITEM = PCOMBOBOXEXITEMA
  225. 'Public Const PCCOMBOBOXEXITEM = PCCOMBOBOXEXITEMA
  226. ''#End If
  227. Public Const CB_DELETESTRING = &H144
  228.  
  229. Public Const CBEM_INSERTITEMA = (WM_USER + 1)
  230. Public Const CBEM_SETIMAGELIST = (WM_USER + 2)
  231. Public Const CBEM_GETIMAGELIST = (WM_USER + 3)
  232. Public Const CBEM_GETITEMA = (WM_USER + 4)
  233. Public Const CBEM_SETITEMA = (WM_USER + 5)
  234. Public Const CBEM_DELETEITEM = CB_DELETESTRING
  235. Public Const CBEM_GETCOMBOCONTROL = (WM_USER + 6)
  236. Public Const CBEM_GETEDITCONTROL = (WM_USER + 7)
  237. '#if (_WIN32_IE >= = &h0400)
  238. Public Const CBEM_SETEXSTYLE = (WM_USER + 8)         ' use  SETEXTENDEDSTYLE instead
  239. Public Const CBEM_SETEXTENDEDSTYLE = (WM_USER + 14)    ' lparam == new style, wParam (optional) == mask
  240. Public Const CBEM_GETEXSTYLE = (WM_USER + 9)        ' use GETEXTENDEDSTYLE instead
  241. Public Const CBEM_GETEXTENDEDSTYLE = (WM_USER + 9)
  242. Public Const CBEM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
  243. Public Const CBEM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
  244. ''#Else
  245. 'Public Const CBEM_SETEXSTYLE = (WM_USER + 8)
  246. 'Public Const CBEM_GETEXSTYLE = (WM_USER + 9)
  247. '#End If
  248. Public Const CBEM_HASEDITCHANGED = (WM_USER + 10)
  249. Public Const CBEM_INSERTITEMW = (WM_USER + 11)
  250. Public Const CBEM_SETITEMW = (WM_USER + 12)
  251. Public Const CBEM_GETITEMW = (WM_USER + 13)
  252.  
  253. '#ifdef UNICODE
  254. 'Public Const CBEM_INSERTITEM = CBEM_INSERTITEMW
  255. 'Public Const CBEM_SETITEM = CBEM_SETITEMW
  256. 'Public Const CBEM_GETITEM = CBEM_GETITEMW
  257. '#Else
  258. Public Const CBEM_INSERTITEM = CBEM_INSERTITEMA
  259. Public Const CBEM_SETITEM = CBEM_SETITEMA
  260. Public Const CBEM_GETITEM = CBEM_GETITEMA
  261. '#End If
  262.  
  263. Public Const CBES_EX_NOEDITIMAGE = &H1
  264. Public Const CBES_EX_NOEDITIMAGEINDENT = &H2
  265. Public Const CBES_EX_PATHWORDBREAKPROC = &H4
  266. '#if (_WIN32_IE >= = &h0400)
  267. Public Const CBES_EX_NOSIZELIMIT = &H8
  268. Public Const CBES_EX_CASESENSITIVE = &H10
  269.  
  270. Public Type NMCOMBOBOXEXA '{
  271. hdr As Long '    NMHDR hdr;
  272. ceItem As COMBOBOXEXITEMA '    COMBOBOXEXITEMA ceItem;
  273. '} NMCOMBOBOXEXA, *PNMCOMBOBOXEXA;
  274. End Type
  275. 'Public Type {
  276. '    NMHDR hdr;
  277. '    COMBOBOXEXITEMW ceItem;
  278. '} NMCOMBOBOXEXW, *PNMCOMBOBOXEXW;
  279. '
  280. '#ifdef UNICODE
  281. 'Public Const NMCOMBOBOXEX            NMCOMBOBOXEXW
  282. 'Public Const PNMCOMBOBOXEX           PNMCOMBOBOXEXW
  283. 'Public Const CBEN_GETDISPINFO        CBEN_GETDISPINFOW
  284. '#Else
  285. 'Public Const NMCOMBOBOXEX = NMCOMBOBOXEXA
  286. 'Public Const PNMCOMBOBOXEX = PNMCOMBOBOXEXA
  287. 'Public Const CBEN_GETDISPINFO = CBEN_GETDISPINFOA
  288. '#End If
  289.  
  290. '#Else
  291. Public Type NMCOMBOBOXEX '{
  292. hdr As Long '    NMHDR hdr;
  293. ceItem As COMBOBOXEXITEMA '    COMBOBOXEXITEM ;
  294. '} NMCOMBOBOXEX, *PNMCOMBOBOXEX;
  295. End Type
  296. Public Const CBEN_FIRST = 0
  297. Public Const CBEN_GETDISPINFO = (CBEN_FIRST - 0)
  298.  
  299. '#End If     ' _WIN32_IE >= = &h0400
  300.  
  301. '#if (_WIN32_IE >= = &h0400)
  302. Public Const CBEN_GETDISPINFOA = (CBEN_FIRST - 0)
  303. '#End If
  304. Public Const CBEN_INSERTITEM = (CBEN_FIRST - 1)
  305. Public Const CBEN_DELETEITEM = (CBEN_FIRST - 2)
  306. Public Const CBEN_BEGINEDIT = (CBEN_FIRST - 4)
  307. Public Const CBEN_ENDEDITA = (CBEN_FIRST - 5)
  308. Public Const CBEN_ENDEDITW = (CBEN_FIRST - 6)
  309.  
  310. '#if (_WIN32_IE >= = &h0400)
  311. Public Const CBEN_GETDISPINFOW = (CBEN_FIRST - 7)
  312. '#End If
  313.  
  314. '#if (_WIN32_IE >= = &h0400)
  315. Public Const CBEN_DRAGBEGINA = (CBEN_FIRST - 8)
  316. Public Const CBEN_DRAGBEGINW = (CBEN_FIRST - 9)
  317.  
  318. '#ifdef UNICODE
  319. 'Public Const CBEN_DRAGBEGIN = CBEN_DRAGBEGINW
  320. '#Else
  321. Public Const CBEN_DRAGBEGIN = CBEN_DRAGBEGINA
  322. '#End If
  323.  
  324. '#End If '(_WIN32_IE >= = &h0400)
  325.  
  326. ' lParam specifies why the endedit is happening
  327. '#ifdef UNICODE
  328. 'Public Const CBEN_ENDEDIT = CBEN_ENDEDITW
  329. '#Else
  330. Public Const CBEN_ENDEDIT = CBEN_ENDEDITA
  331. '#End If
  332.  
  333. Public Const CBENF_KILLFOCUS = 1
  334. Public Const CBENF_RETURN = 2
  335. Public Const CBENF_ESCAPE = 3
  336. Public Const CBENF_DROPDOWN = 4
  337.  
  338. Public Const CBEMAXSTRLEN = 260
  339.  
  340. '#if (_WIN32_IE >= = &h0400)
  341. ' CBEN_DRAGBEGIN sends this information ...
  342. '
  343. 'Public Type =
  344. '    NMHDR hdr;
  345. '    int   iItemid;
  346. '    WCHAR szText[CBEMAXSTRLEN];
  347. '}NMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW;
  348.  
  349. Public Type NMCBEDRAGBEGINA '{
  350. hdr As Long '      NMHDR hdr;
  351. iItemid  As Long '     int   iItemid;
  352. szText As String * CBEMAXSTRLEN '    char szText[CBEMAXSTRLEN];
  353. '}NMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA;
  354. End Type
  355. '#ifdef UNICODE
  356. 'Public Const  NMCBEDRAGBEGIN NMCBEDRAGBEGINW
  357. 'Public Const  LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINW
  358. 'Public Const  PNMCBEDRAGBEGIN PNMCBEDRAGBEGINW
  359. '#Else
  360. 'Public Const NMCBEDRAGBEGIN = NMCBEDRAGBEGINA
  361. 'Public Const LPNMCBEDRAGBEGIN = LPNMCBEDRAGBEGINA
  362. 'Public Const PNMCBEDRAGBEGIN = PNMCBEDRAGBEGINA
  363. '#End If
  364. '#End If     ' _WIN32_IE >= = &h0400
  365.  
  366. ' CBEN_ENDEDIT sends this information...
  367. ' fChanged if the user actually did anything
  368. ' iNewSelection gives what would be the new selection unless the notify is failed
  369. '                      iNewSelection may be CB_ERR if there's no match
  370. 'Public Type {
  371. '        NMHDR hdr;
  372. '        BOOL fChanged;
  373. '        int iNewSelection;
  374. '        WCHAR szText[CBEMAXSTRLEN];
  375. '        int iWhy;
  376. '} NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW;
  377.  
  378. Public Type NMCBEENDEDITA '{
  379. hdr As Long '        NMHDR hdr;
  380. fChanged    As Boolean '        BOOL fChanged;
  381. iNewSelection  As Long '       int iNewSelection;
  382. szText As String * CBEMAXSTRLEN '     char szText[CBEMAXSTRLEN];
  383. iWhy      As Long '    int iWhy;
  384. '} NMCBEENDEDITA, *LPNMCBEENDEDITA,*PNMCBEENDEDITA;
  385. End Type
  386. '
  387. '#ifdef UNICODE
  388. 'Public Const  NMCBEENDEDIT NMCBEENDEDITW
  389. 'Public Const  LPNMCBEENDEDIT LPNMCBEENDEDITW
  390. 'Public Const  PNMCBEENDEDIT PNMCBEENDEDITW
  391. '#Else
  392. 'Public Const NMCBEENDEDIT = NMCBEENDEDITA
  393. 'Public Const LPNMCBEENDEDIT = LPNMCBEENDEDITA
  394. 'Public Const PNMCBEENDEDIT = PNMCBEENDEDITA
  395. '#End If
  396.  
  397. '#End If
  398.  
  399. '#End If     ' _WIN32_IE >= = &h0300
  400. Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  401. Public Const MIN_COMBOCX = 113
  402. Public Const MIN_COMBOCY = 42
  403. '//====== COMMON CONTROL STYLES ================================================
  404. Public Const CCS_TOP = &H1                      'L
  405. Public Const CCS_NOMOVEY = &H2                  'L
  406. Public Const CCS_BOTTOM = &H3                   'L
  407. Public Const CCS_NORESIZE = &H4                 'L
  408. Public Const CCS_NOPARENTALIGN = &H8            'L
  409. Public Const CCS_ADJUSTABLE = &H20              'L
  410. Public Const CCS_NODIVIDER = &H40               'L
  411. #If WIN32_IE >= &H300 Then
  412. Public Const CCS_VERT = &H80                    'L
  413. Public Const CCS_LEFT = (CCS_VERT Or CCS_TOP)
  414. Public Const CCS_RIGHT = (CCS_VERT Or CCS_BOTTOM)
  415. Public Const CCS_NOMOVEX = (CCS_VERT Or CCS_NOMOVEY)
  416. #End If
  417. '/*
  418. ' * Combo Box styles
  419. ' */
  420. Public Const CBS_SIMPLE = &H1
  421. Public Const CBS_DROPDOWN = &H2
  422. Public Const CBS_DROPDOWNLIST = &H3
  423. Public Const CBS_OWNERDRAWFIXED = &H10
  424. Public Const CBS_OWNERDRAWVARIABLE = &H20
  425. Public Const CBS_AUTOHSCROLL = &H40
  426. Public Const CBS_OEMCONVERT = &H80
  427. Public Const CBS_SORT = &H100
  428. Public Const CBS_HASSTRINGS = &H200
  429. Public Const CBS_NOINTEGRALHEIGHT = &H400
  430. Public Const CBS_DISABLENOSCROLL = &H800
  431. #If (WINVER >= &H400) Then
  432. Public Const CBS_UPPERCASE = &H2000
  433. Public Const CBS_LOWERCASE = &H4000
  434. #End If '/* WINVER >= =&h0400 */
  435. Public Const CB_SETCURSEL = &H14E
  436. Public Const CB_ADDSTRING = &H143
  437. 'Public Const CB_DELETESTRING = &H144
  438. Public Const CB_DIR = &H145
  439. Public Const CB_ERR = (-1)
  440. Public Const CB_ERRSPACE = (-2)
  441. Public Const CB_FINDSTRING = &H14C
  442. Public Const CB_FINDSTRINGEXACT = &H158
  443. Public Const CB_GETCOUNT = &H146
  444. Public Const CB_GETCURSEL = &H147
  445. Public Const CB_GETDROPPEDCONTROLRECT = &H152
  446. Public Const CB_GETDROPPEDSTATE = &H157
  447. Public Const CB_GETEDITSEL = &H140
  448. Public Const CB_GETEXTENDEDUI = &H156
  449. Public Const CB_GETITEMDATA = &H150
  450. Public Const CB_GETITEMHEIGHT = &H154
  451. Public Const CB_GETLBTEXT = &H148
  452. Public Const CB_GETLBTEXTLEN = &H149
  453. Public Const CB_GETLOCALE = &H15A
  454. Public Const CB_INSERTSTRING = &H14A
  455. Public Const CB_LIMITTEXT = &H141
  456. Public Const CB_MSGMAX = &H15B
  457. Public Const CB_OKAY = 0
  458. Public Const CB_RESETCONTENT = &H14B
  459. Public Const CB_SELECTSTRING = &H14D
  460. 'Public Const CB_SETCURSEL = &H14E
  461. Public Const CB_SETEDITSEL = &H142
  462. Public Const CB_SETEXTENDEDUI = &H155
  463. Public Const CB_SETITEMDATA = &H151
  464. Public Const CB_SETITEMHEIGHT = &H153
  465. Public Const CB_SETLOCALE = &H159
  466. Public Const CB_SHOWDROPDOWN = &H14F
  467. Public Const CBN_CLOSEUP = 8
  468. Public Const CBN_DBLCLK = 2
  469. Public Const CBN_DROPDOWN = 7
  470. Public Const CBN_EDITCHANGE = 5
  471. Public Const CBN_EDITUPDATE = 6
  472. Public Const CBN_ERRSPACE = (-1)
  473. Public Const CBN_KILLFOCUS = 4
  474. Public Const CBN_SELCHANGE = 1
  475. Public Const CBN_SELENDCANCEL = 10
  476. Public Const CBN_SELENDOK = 9
  477. Public Const CBN_SETFOCUS = 3
  478. 'Public Const CBS_AUTOHSCROLL = &H40&
  479. 'Public Const CBS_DISABLENOSCROLL = &H800&
  480. 'Public Const CBS_DROPDOWN = &H2&
  481. 'Public Const CBS_DROPDOWNLIST = &H3&
  482. 'Public Const CBS_HASSTRINGS = &H200&
  483. 'Public Const CBS_NOINTEGRALHEIGHT = &H400&
  484. 'Public Const CBS_OEMCONVERT = &H80&
  485. 'Public Const CBS_OWNERDRAWFIXED = &H10&
  486. 'Public Const CBS_OWNERDRAWVARIABLE = &H20&
  487. 'Public Const CBS_SIMPLE = &H1&
  488. 'Public Const CBS_SORT = &H100&
  489. Public Const WM_COMMAND = &H111
  490. 'Global Window Handle & Windowprocedure Handle
  491. Public Wnd As Long, OldProc As Long
  492.  
  493. Function CreateComboBoxEx(ByVal hwnd As Long) As Long
  494. 'This is the main function.It Creates a ComboBoxEx window and returns the window handle
  495. 'You can modify this function by including Coordinate Parameters,style etc.
  496.  
  497. Dim stl As Long, ExStl As Long, Inited As Long
  498. Dim Ret As Long
  499.     Dim IX As INITCOMMONCONTROLSEX
  500.         IX.dwICC = ICC_USEREX_CLASSES  ' ComboBoxEx Classes
  501.         IX.dwSize = Len(IX)
  502. 'If CommonControl library is not initialized the program does'nt work.
  503. Inited = INITCOMMONCONTROLSEX(IX)
  504.         If Inited <> 1 Then
  505.             MsgBox "INITCOMMONCONTROLSEX Failed.", vbCritical
  506.         End If
  507.     stl = WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or WS_CLIPCHILDREN Or WS_CLIPSIBLINGS 'Or WS_THICKFRAME 'Or WS_BORDER
  508. 'Here i gives the different styles for the ComboBoxEx.Select the styles you wish
  509.     stl = stl Or CBS_AUTOHSCROLL
  510. '    stl = stl Or CBS_DROPDOWNLIST
  511.     stl = stl Or CBS_DROPDOWN
  512.         Dim rc As RECT
  513.             GetWindowRect hwnd, rc
  514.                 rc.Bottom = rc.Bottom - rc.Top
  515.                 rc.Right = rc.Right - rc.Left
  516.  'Creates the ComboBoxEx Window.
  517. 'It is very fast and safe function.In VB the dynamic control creation is not possible when the controls are kept in DLLS that not compatible with VB.
  518. 'If the control not created no error will occur the return value will be zero else return value will be handle.
  519. 'This is the style of C & CPP programs. The concept of pointers is done in VB by this way.
  520.                    
  521. Wnd = CreateWindowEx(ExStl, WC_COMBOBOXEXA, ByVal " ", stl, 10, 10, rc.Right / 3, rc.Bottom / 2, hwnd, 0, App.hInstance, ByVal hwnd)
  522. If Wnd = 0 Then
  523. ' Window is not created . Load Window class from the DLL. You can test this line by commenting the above line 'Inited = INITCOMMONCONTROLSEX(IX)...'
  524. 'The below technique is very useful to crteate other controls used by other Programs.
  525. '        MsgBox "Registering Class"
  526.         Dim Class As WNDCLASS
  527.     With Class
  528.         .cbClsextra = Len(Class)
  529.         .hInstance = LoadLibrary("COMCTL32.DLL")
  530.         .lpszClassName = WC_COMBOBOXEXA
  531.         .style = CS_PUBLICCLASS
  532.     End With
  533.     Ret = RegisterClass(Class)
  534.         If Ret = 0 Then
  535.             'If Register class failed exit
  536.             Exit Function
  537.         End If
  538. Wnd = CreateWindowEx(ExStl, WC_COMBOBOXEXA, ByVal " ", stl, 0, 0, rc.Right / 3, rc.Bottom / 2, hwnd, 0, App.hInstance, ByVal hwnd)
  539. End If
  540. If Wnd <> 0 Then
  541.     CreateComboBoxEx = Wnd
  542.         'An Imagelist is created for put the tab images quickly.
  543.         'You can change the icon size to 48x48 or as you wish.
  544. '***************** Used Bitmpas for Method 1 *************************************
  545.     'Here creates the imagelist that will contain bitmaps
  546.             hIml = ImageList_Create(16, 16, ILC_COLOR Or ILD_TRANSPARENT, 1, 0)
  547.                Ret = ImageList_Add(hIml, frmComboBoxEx.Picture1.Picture.Handle, 0)
  548.                 Ret = ImageList_Add(hIml, frmComboBoxEx.Picture2.Picture.Handle, 0)
  549. '************************************************************************************
  550. '                           or
  551. '***************** Used Icons for Method 2 *************************************
  552.     'Here creates the imagelist that will contain icons
  553. '            hIml = ImageList_Create(32, 32, ILC_COLOR Or ILD_TRANSPARENT, 1, 0)
  554. '                Ret = ImageList_AddIcon(hIml, , frmComboBoxEx.Icon.Handle)
  555. '                Ret = ImageList_AddIcon(hIml, , frmComboBoxEx.Picture3.Picture.Handle)
  556. '************************************************************************************
  557.         'Sets the Imagelist
  558.             Ret = SendMessage(Wnd, CBEM_SETIMAGELIST, 0, ByVal hIml)
  559.  
  560. '            SendMessage Wnd, CBEM_SETUNICODEFORMAT, 0, ByVal 0 'Set to ANSI
  561. '            SendMessage Wnd, CBEM_SETUNICODEFORMAT, 1, ByVal 0 'Set to Unicode
  562.         'Adds some sample Items
  563.                 InsertItem "Item 1"
  564.                 InsertItem "Item 2", , 1, 1, 1
  565.                 InsertItem "Item 3", , , , 2
  566.                 InsertItem "Item 4", , 1, 1, 3
  567.                 'Selects Item index 1
  568.                     SelItem 1
  569.             'Sets the window procedure
  570.     OldProc = SetWindowLong(Wnd, GWL_WNDPROC, AddressOf WndProc)
  571. End If
  572. End Function
  573. Function InsertItem(ByVal str As String, Optional ByVal idx As Long = -1, _
  574.     Optional ByVal img As Long = 0, Optional ByVal Selimg As Long = 0, _
  575.     Optional ByVal Indent As Long = 0) As Long
  576. 'Inserts an item to the ComboBoxEx
  577.         Dim cbi As COMBOBOXEXITEMA
  578.             With cbi
  579.                 .mask = CBEIF_TEXT Or CBEIF_IMAGE Or CBEIF_SELECTEDIMAGE Or CBEIF_INDENT
  580.                 .pszText = str
  581.                 .cchTextMax = Len(.pszText)
  582.                 .iItem = idx '-1
  583.                 .iImage = img '0 ' Image to display
  584.                 .iSelectedImage = Selimg '0 ' Image to display
  585.                 .iIndent = Indent ' Indent .
  586.             End With
  587.     InsertItem = SendMessage(Wnd, CBEM_INSERTITEM, 0, cbi)
  588. End Function
  589.  
  590. Function SelItem(ByVal idx As Long) As Long
  591. 'Selects an item by Index
  592. SelItem = SendMessage(Wnd, CB_SETCURSEL, idx, ByVal 0)
  593. End Function
  594. Function DelItem(ByVal idx As Long) As Long
  595. 'Delete an item by index
  596. DelItem = SendMessage(Wnd, CBEM_DELETEITEM, idx, ByVal 0)
  597. End Function
  598. Function GetItem(cbi As COMBOBOXEXITEMA, Optional ByVal idx As Long = -1) As Long
  599. 'Gets an item's information
  600. '    Dim cbi As COMBOBOXEXITEMA
  601.         With cbi
  602.             .mask = CBEIF_TEXT Or CBEIF_IMAGE Or CBEIF_SELECTEDIMAGE Or CBEIF_INDENT
  603.             .pszText = Space$(260)
  604.             .cchTextMax = Len(.pszText)
  605.             .iItem = idx '-1
  606.             .iImage = 0 '0 ' Image to display
  607.             .iSelectedImage = 0 '0 ' Image to display
  608.             .iIndent = 0
  609.         End With
  610.     GetItem = SendMessage(Wnd, CBEM_GETITEMA, 0, cbi)
  611. 'Returns nonzero if successful, or zero otherwise.
  612. 'When the message is sent, the iItem and mask members of the structure must be set to indicate the index of the target item and the type of information to be retrieved. Other members are set as needed. For example, to get text, you must set the CBEIF_TEXT flag in mask, and assign a value to cchTextMax. Setting the iItem member to -1 will retrieve the item displayed in the edit control.
  613. End Function
  614. Function GetItemText(Optional ByVal idx As Long = -1) As String
  615. 'returns an item's text by index
  616.     Dim cbi As COMBOBOXEXITEMA, Ret As Long
  617. Ret = GetItem(cbi, idx)
  618. If Ret Then
  619.     GetItemText = Trim0(cbi.pszText)
  620. End If
  621. End Function
  622. Function GetSelItem() As Long
  623. 'returns selected item index
  624. GetSelItem = SendMessage(Wnd, CB_GETCURSEL, 0, ByVal 0)
  625. End Function
  626.  
  627. Function SetItemText(ByVal str As String, Optional ByVal idx As Long = -1) As Long
  628. 'Change the item's text by giving index & newtext
  629.     Dim cbi As COMBOBOXEXITEMA, Ret As Long
  630. Ret = GetItem(cbi, idx)
  631. If Ret Then
  632.         cbi.pszText = str
  633.         cbi.cchTextMax = Len(str)
  634.     SetItemText = SendMessage(Wnd, CBEM_SETITEMA, 0, cbi)
  635. '        Returns nonzero if successful, or zero otherwise
  636. End If
  637. End Function
  638.  
  639. Function DropDown() As Long
  640. 'Show the dropdown list
  641. DropDown = SendMessage(Wnd, CB_SHOWDROPDOWN, 1, ByVal 0)
  642. End Function
  643. Function GetCount() As Long
  644. 'returns the itemcount
  645. GetCount = SendMessage(Wnd, CB_GETCOUNT, 0, ByVal 0)
  646. End Function
  647. Function Clear() As Long
  648. 'clear the comboboxex control
  649. Clear = SendMessage(Wnd, CB_RESETCONTENT, 0, ByVal 0)
  650. End Function
  651. Function GetEditCtl() As Long
  652. 'returns the editcontrl window handle of the comboboxex
  653. 'Usefule to get or set the typing text.
  654. GetEditCtl = SendMessage(Wnd, CBEM_GETEDITCONTROL, 0, ByVal 0)
  655. End Function
  656. Function IsEditChanged() As Boolean
  657. 'returns if editcontrol is changed
  658. IsEditChanged = SendMessage(Wnd, CBEM_HASEDITCHANGED, 0, ByVal 0) = 1
  659. End Function
  660.  
  661. Function DestroyComboBoxEx() As Long
  662. 'Destroys the window
  663. If Wnd <> 0 Then
  664.     DestroyComboBoxEx = DestroyWindow(Wnd)
  665.     If OldProc <> 0 Then
  666.         SetWindowLong Wnd, GWL_WNDPROC, OldProc
  667.     End If
  668.         Wnd = 0
  669.         OldProc = 0
  670. End If
  671. End Function
  672. Function WndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wparam As Long, ByVal lParam As Long) As Long
  673. Dim nc As Long, str As String
  674. Select Case msg
  675.     Case WM_COMMAND
  676.         nc = HiWord(wparam) 'Notify Code
  677.             Select Case nc
  678.                 Case CBN_SELCHANGE
  679.                     frmComboBoxEx.Caption = "SelChange " & GetSelItem
  680.                 Case Else
  681.                     frmComboBoxEx.Caption = "else " & nc
  682. '                     If IsEditChanged = True Then
  683. '                                    str = Space$(260)
  684. '                                GetWindowText GetEditCtl, str, Space$(260)
  685. ''                            frmComboBoxEx.Caption = "EditChange " & Trim0(str)
  686. '                    End If
  687.            End Select
  688.     Case WM_NOTIFY
  689.         Dim hdr As NMHDR
  690.                     frmComboBoxEx.Caption = "WM_NOTIFY "
  691.             CopyMemory hdr, ByVal lParam, Len(hdr)
  692.         Select Case hdr.code
  693.             Case CBEN_BEGINEDIT
  694.                     frmComboBoxEx.Caption = "CBEN_BEGINEDIT "
  695.         End Select
  696.  
  697.     Case Else
  698. End Select
  699.     WndProc = CallWindowProc(OldProc, hwnd, msg, wparam, lParam)
  700. End Function
  701.