ReactOS  0.4.14-dev-552-g2fad488
CAutoComplete.cpp
Go to the documentation of this file.
1 /*
2  * AutoComplete interfaces implementation.
3  *
4  * Copyright 2004 Maxime Bellengé <maxime.bellenge@laposte.net>
5  * Copyright 2009 Andrew Hill
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 /*
23  Implemented:
24  - ACO_AUTOAPPEND style
25  - ACO_AUTOSUGGEST style
26  - ACO_UPDOWNKEYDROPSLIST style
27 
28  - Handle pwzsRegKeyPath and pwszQuickComplete in Init
29 
30  TODO:
31  - implement ACO_SEARCH style
32  - implement ACO_FILTERPREFIXES style
33  - implement ACO_USETAB style
34  - implement ACO_RTLREADING style
35 
36  */
37 
38 #include "precomp.h"
39 
40 static const WCHAR autocomplete_propertyW[] = {'W','i','n','e',' ','A','u','t','o',
41  'c','o','m','p','l','e','t','e',' ',
42  'c','o','n','t','r','o','l',0};
43 
44 /**************************************************************************
45  * IAutoComplete_Constructor
46  */
48 {
49  enabled = TRUE;
53  hwndListBox = NULL;
54  txtbackup = NULL;
56  hwndEdit = NULL;
58 }
59 
60 /**************************************************************************
61  * IAutoComplete_Destructor
62  */
64 {
65  TRACE(" destroying IAutoComplete(%p)\n", this);
70  if (hwndListBox)
72 }
73 
74 /******************************************************************************
75  * IAutoComplete_fnEnable
76  */
78 {
79  HRESULT hr = S_OK;
80 
81  TRACE("(%p)->(%s)\n", this, (fEnable) ? "true" : "false");
82 
83  enabled = fEnable;
84 
85  return hr;
86 }
87 
88 /******************************************************************************
89  * create_listbox
90  */
92 {
94 
95  /* FIXME : The listbox should be resizable with the mouse. WS_THICKFRAME looks ugly */
101 
102  if (hwndListBox)
103  {
106  }
107 }
108 
109 
110 /******************************************************************************
111  * IAutoComplete_fnInit
112  */
113 HRESULT WINAPI CAutoComplete::Init(HWND hwndEdit, IUnknown *punkACL, LPCOLESTR pwzsRegKeyPath, LPCOLESTR pwszQuickComplete)
114 {
115  TRACE("(%p)->(0x%08lx, %p, %s, %s)\n",
116  this, hwndEdit, punkACL, debugstr_w(pwzsRegKeyPath), debugstr_w(pwszQuickComplete));
117 
118  if (options & ACO_AUTOSUGGEST)
119  TRACE(" ACO_AUTOSUGGEST\n");
120  if (options & ACO_AUTOAPPEND)
121  TRACE(" ACO_AUTOAPPEND\n");
122  if (options & ACO_SEARCH)
123  FIXME(" ACO_SEARCH not supported\n");
125  FIXME(" ACO_FILTERPREFIXES not supported\n");
126  if (options & ACO_USETAB)
127  FIXME(" ACO_USETAB not supported\n");
129  TRACE(" ACO_UPDOWNKEYDROPSLIST\n");
130  if (options & ACO_RTLREADING)
131  FIXME(" ACO_RTLREADING not supported\n");
132 
133  if (!hwndEdit || !punkACL)
134  return E_INVALIDARG;
135 
136  if (this->initialized)
137  {
138  WARN("Autocompletion object is already initialized\n");
139  /* This->hwndEdit is set to NULL when the edit window is destroyed. */
140  return this->hwndEdit ? E_FAIL : E_UNEXPECTED;
141  }
142 
144  {
145  TRACE("No IEnumString interface\n");
146  return E_NOINTERFACE;
147  }
148 
149  this->hwndEdit = hwndEdit;
150  this->initialized = TRUE;
152  /* Keep at least one reference to the object until the edit window is destroyed. */
153  this->AddRef();
154  SetPropW( this->hwndEdit, autocomplete_propertyW, (HANDLE)this );
155 
156  if (options & ACO_AUTOSUGGEST)
157  {
158  this->CreateListbox();
159  }
160 
161  if (pwzsRegKeyPath)
162  {
163  WCHAR *key;
165  WCHAR *value;
166  HKEY hKey = 0;
167  LONG res;
168  LONG len;
169 
170  /* pwszRegKeyPath contains the key as well as the value, so we split */
171  key = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (wcslen(pwzsRegKeyPath) + 1) * sizeof(WCHAR));
172 
173  if (key)
174  {
175  wcscpy(key, pwzsRegKeyPath);
176  value = const_cast<WCHAR *>(wcsrchr(key, '\\'));
177 
178  if (value)
179  {
180  *value = 0;
181  value++;
182  /* Now value contains the value and buffer the key */
184 
185  if (res != ERROR_SUCCESS)
186  {
187  /* if the key is not found, MSDN states we must seek in HKEY_LOCAL_MACHINE */
189  }
190 
191  if (res == ERROR_SUCCESS)
192  {
193  len = sizeof(result);
194  res = RegQueryValueW(hKey, value, result, &len);
195  if (res == ERROR_SUCCESS)
196  {
199  }
200  RegCloseKey(hKey);
201  }
202  }
203 
204  HeapFree(GetProcessHeap(), 0, key);
205  }
206  else
207  {
208  TRACE("HeapAlloc Failed when trying to alloca %d bytes\n", (wcslen(pwzsRegKeyPath) + 1) * sizeof(WCHAR));
209  return S_FALSE;
210  }
211  }
212 
213  if ((pwszQuickComplete) && (!quickComplete))
214  {
215  quickComplete = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (wcslen(pwszQuickComplete) + 1) * sizeof(WCHAR));
216 
217  if (quickComplete)
218  {
219  wcscpy(quickComplete, pwszQuickComplete);
220  }
221  else
222  {
223  TRACE("HeapAlloc Failed when trying to alloca %d bytes\n", (wcslen(pwszQuickComplete) + 1) * sizeof(WCHAR));
224  return S_FALSE;
225  }
226  }
227 
228  return S_OK;
229 }
230 
231 /**************************************************************************
232  * IAutoComplete_fnGetOptions
233  */
235 {
236  HRESULT hr = S_OK;
237 
238  TRACE("(%p) -> (%p)\n", this, pdwFlag);
239 
240  *pdwFlag = options;
241 
242  return hr;
243 }
244 
245 /**************************************************************************
246  * IAutoComplete_fnSetOptions
247  */
249 {
250  HRESULT hr = S_OK;
251 
252  TRACE("(%p) -> (0x%x)\n", this, dwFlag);
253 
254  options = (AUTOCOMPLETEOPTIONS)dwFlag;
255 
257  CreateListbox();
258 
259  return hr;
260 }
261 
262 /*
263  Window procedure for autocompletion
264  */
266 {
267  CAutoComplete *pThis = static_cast<CAutoComplete *>(GetPropW(hwnd, autocomplete_propertyW));
268  HRESULT hr;
269  WCHAR hwndText[255];
270  WCHAR *hwndQCText;
271  RECT r;
272  BOOL control, filled, displayall = FALSE;
273  int cpt, height, sel;
274  ULONG fetched;
275 
276  if (!pThis->enabled)
277  {
278  return CallWindowProcW(pThis->wpOrigEditProc, hwnd, uMsg, wParam, lParam);
279  }
280 
281  switch (uMsg)
282  {
283  case CB_SHOWDROPDOWN:
284  {
285  ShowWindow(pThis->hwndListBox, SW_HIDE);
286  }; break;
287 
288  case WM_KILLFOCUS:
289  {
290  if ((pThis->options & ACO_AUTOSUGGEST) && ((HWND)wParam != pThis->hwndListBox))
291  {
292  ShowWindow(pThis->hwndListBox, SW_HIDE);
293  }
294  return CallWindowProcW(pThis->wpOrigEditProc, hwnd, uMsg, wParam, lParam);
295  }; break;
296 
297  case WM_KEYUP:
298  {
299  GetWindowTextW(hwnd, (LPWSTR)hwndText, 255);
300 
301  switch(wParam)
302  {
303  case VK_RETURN:
304  {
305  /* If quickComplete is set and control is pressed, replace the string */
306  control = GetKeyState(VK_CONTROL) & 0x8000;
307  if (control && pThis->quickComplete)
308  {
309  hwndQCText = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
310  (wcslen(pThis->quickComplete)+wcslen(hwndText))*sizeof(WCHAR));
311  sel = swprintf(hwndQCText, pThis->quickComplete, hwndText);
312  SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)hwndQCText);
313  SendMessageW(hwnd, EM_SETSEL, 0, sel);
314  HeapFree(GetProcessHeap(), 0, hwndQCText);
315  }
316 
317  ShowWindow(pThis->hwndListBox, SW_HIDE);
318  return 0;
319  }; break;
320 
321  case VK_LEFT:
322  case VK_RIGHT:
323  {
324  return 0;
325  }; break;
326 
327  case VK_UP:
328  case VK_DOWN:
329  {
330  /* Two cases here :
331  - if the listbox is not visible, displays it
332  with all the entries if the style ACO_UPDOWNKEYDROPSLIST
333  is present but does not select anything.
334  - if the listbox is visible, change the selection
335  */
337  && (!IsWindowVisible(pThis->hwndListBox) && (! *hwndText)) )
338  {
339  /* We must display all the entries */
340  displayall = TRUE;
341  }
342  else
343  {
344  if (IsWindowVisible(pThis->hwndListBox))
345  {
346  int count;
347 
348  count = SendMessageW(pThis->hwndListBox, LB_GETCOUNT, 0, 0);
349  /* Change the selection */
350  sel = SendMessageW(pThis->hwndListBox, LB_GETCURSEL, 0, 0);
351  if (wParam == VK_UP)
352  sel = ((sel-1) < 0) ? count-1 : sel-1;
353  else
354  sel = ((sel+1) >= count) ? -1 : sel+1;
355 
356  SendMessageW(pThis->hwndListBox, LB_SETCURSEL, sel, 0);
357 
358  if (sel != -1)
359  {
360  WCHAR *msg;
361  int len;
362 
364  msg = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (len + 1) * sizeof(WCHAR));
365 
366  if (msg)
367  {
368  SendMessageW(pThis->hwndListBox, LB_GETTEXT, sel, (LPARAM)msg);
371 
372  HeapFree(GetProcessHeap(), 0, msg);
373  }
374  else
375  {
376  TRACE("HeapAlloc failed to allocate %d bytes\n", (len + 1) * sizeof(WCHAR));
377  }
378  }
379  else
380  {
383  }
384  }
385  return 0;
386  }
387  }; break;
388 
389  case VK_BACK:
390  case VK_DELETE:
391  {
392  if ((! *hwndText) && (pThis->options & ACO_AUTOSUGGEST))
393  {
394  ShowWindow(pThis->hwndListBox, SW_HIDE);
395  return CallWindowProcW(pThis->wpOrigEditProc, hwnd, uMsg, wParam, lParam);
396  }
397 
398  if (pThis->options & ACO_AUTOAPPEND)
399  {
400  DWORD b;
402  if (b>1)
403  {
404  hwndText[b-1] = '\0';
405  }
406  else
407  {
408  hwndText[0] = '\0';
409  SetWindowTextW(hwnd, hwndText);
410  }
411  }
412  }; break;
413 
414  default:
415  ;
416  }
417 
419 
420  HeapFree(GetProcessHeap(), 0, pThis->txtbackup);
421 
422  pThis->txtbackup = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (wcslen(hwndText)+1)*sizeof(WCHAR));
423 
424  if (pThis->txtbackup)
425  {
426  wcscpy(pThis->txtbackup, hwndText);
427  }
428  else
429  {
430  TRACE("HeapAlloc failed to allocate %d bytes\n", (wcslen(hwndText)+1)*sizeof(WCHAR));
431  }
432 
433  /* Returns if there is no text to search and we doesn't want to display all the entries */
434  if ((!displayall) && (! *hwndText) )
435  break;
436 
437  pThis->enumstr->Reset();
438  filled = FALSE;
439  size_t curlen = wcslen(hwndText);
440 
441  for(cpt = 0;;)
442  {
444  hr = pThis->enumstr->Next(1, &strs, &fetched);
445  if (hr != S_OK)
446  break;
447 
448  if (!_wcsnicmp(hwndText, strs, curlen))
449  {
450 
451  if (pThis->options & ACO_AUTOAPPEND && *hwndText)
452  {
453  CComBSTR str((PCWSTR)strs);
454  memcpy(str.m_str, hwndText, curlen * sizeof(WCHAR));
456  SendMessageW(hwnd, EM_SETSEL, curlen, str.Length());
457  if (!(pThis->options & ACO_AUTOSUGGEST))
458  break;
459  }
460 
461  if (pThis->options & ACO_AUTOSUGGEST)
462  {
464  filled = TRUE;
465  cpt++;
466  }
467  }
468  }
469 
470  if (pThis->options & ACO_AUTOSUGGEST)
471  {
472  if (filled)
473  {
475  SendMessageW(pThis->hwndListBox, LB_CARETOFF, 0, 0);
476  GetWindowRect(hwnd, &r);
478  /* It seems that Windows XP displays 7 lines at most
479  and otherwise displays a vertical scroll bar */
481  r.left, r.bottom + 1, r.right - r.left, min(height * 7, height * (cpt + 1)),
482  SWP_SHOWWINDOW );
483  }
484  else
485  {
486  ShowWindow(pThis->hwndListBox, SW_HIDE);
487  }
488  }
489 
490  }; break;
491 
492  case WM_DESTROY:
493  {
494  /* Release our reference that we had since ->Init() */
495  pThis->Release();
496  return 0;
497  }
498 
499 
500  default:
501  {
502  return CallWindowProcW(pThis->wpOrigEditProc, hwnd, uMsg, wParam, lParam);
503  }
504 
505  }
506 
507  return 0;
508 }
509 
511 {
512  CAutoComplete *pThis = reinterpret_cast<CAutoComplete *>(GetWindowLongPtrW(hwnd, GWLP_USERDATA));
513  WCHAR *msg;
514  int sel, len;
515 
516  switch (uMsg)
517  {
518  case WM_MOUSEMOVE:
519  {
522  }; break;
523 
524  case WM_LBUTTONDOWN:
525  {
526  sel = SendMessageW(hwnd, LB_GETCURSEL, 0, 0);
527 
528  if (sel < 0)
529  break;
530 
531  len = SendMessageW(pThis->hwndListBox, LB_GETTEXTLEN, sel, 0);
532  msg = (WCHAR *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (len + 1) * sizeof(WCHAR));
533 
534  if (msg)
535  {
537  SendMessageW(pThis->hwndEdit, WM_SETTEXT, 0, (LPARAM)msg);
538  SendMessageW(pThis->hwndEdit, EM_SETSEL, 0, wcslen(msg));
540 
541  HeapFree(GetProcessHeap(), 0, msg);
542  }
543  else
544  {
545  TRACE("HeapAlloc failed to allocate %d bytes\n", (len + 1) * sizeof(WCHAR));
546  }
547 
548  }; break;
549 
550  default:
551  return CallWindowProcW(pThis->wpOrigLBoxProc, hwnd, uMsg, wParam, lParam);
552  }
553  return 0;
554 }
555 
556 /**************************************************************************
557  * IAutoCompleteDropDown
558  */
560 {
561  BOOL dropped = IsWindowVisible(hwndListBox);
562 
563  if (pdwFlags)
564  *pdwFlags = (dropped ? ACDD_VISIBLE : 0);
565 
566  if (ppwszString)
567  {
568  *ppwszString = NULL;
569 
570  if (dropped)
571  {
572  int sel = SendMessageW(hwndListBox, LB_GETCURSEL, 0, 0);
573  if (sel >= 0)
574  {
576  *ppwszString = (LPWSTR)CoTaskMemAlloc((len+1)*sizeof(WCHAR));
577  SendMessageW(hwndListBox, LB_GETTEXT, sel, (LPARAM)*ppwszString);
578  }
579  }
580  }
581 
582  return S_OK;
583 }
584 
586 {
587  FIXME("(%p): stub\n", this);
588  return E_NOTIMPL;
589 }
590 
591 /**************************************************************************
592  * IEnumString
593  */
595 {
596  FIXME("(%p, %d, %p, %p): stub\n", this, celt, rgelt, pceltFetched);
597  *pceltFetched = 0;
598  return E_NOTIMPL;
599 }
600 
602 {
603  FIXME("(%p, %d): stub\n", this, celt);
604  return E_NOTIMPL;
605 }
606 
608 {
609  FIXME("(%p): stub\n", this);
610  return E_NOTIMPL;
611 }
612 
614 {
615  FIXME("(%p, %p): stub\n", this, ppOut);
616  *ppOut = NULL;
617  return E_NOTIMPL;
618 }
#define LB_SETCURSEL
Definition: winuser.h:2045
static LRESULT APIENTRY ACEditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
virtual HRESULT STDMETHODCALLTYPE Reset()
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
const uint16_t * PCWSTR
Definition: typedefs.h:55
virtual HRESULT WINAPI Init(HWND hwndEdit, IUnknown *punkACL, LPCOLESTR pwzsRegKeyPath, LPCOLESTR pwszQuickComplete)
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
#define ERROR_SUCCESS
Definition: deptool.c:10
#define WM_LBUTTONDOWN
Definition: winuser.h:1758
HRESULT hr
Definition: shlfolder.c:183
#define LB_ADDSTRING
Definition: winuser.h:2013
#define KEY_READ
Definition: nt_native.h:1023
virtual HRESULT STDMETHODCALLTYPE GetDropDownStatus(DWORD *pdwFlags, LPWSTR *ppwszString)
#define SW_HIDE
Definition: winuser.h:762
HWND WINAPI SetParent(_In_ HWND, _In_opt_ HWND)
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define LBS_HASSTRINGS
Definition: pedump.c:684
#define WARN(fmt,...)
Definition: debug.h:111
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define VK_LEFT
Definition: winuser.h:2199
#define HWND_TOP
Definition: winuser.h:1193
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
UINT_PTR WPARAM
Definition: windef.h:207
#define VK_DOWN
Definition: winuser.h:2202
#define WS_CHILD
Definition: pedump.c:617
WNDPROC wpOrigLBoxProc
Definition: CAutoComplete.h:38
CComPtr< IEnumString > enumstr
Definition: CAutoComplete.h:41
#define GetWindowLongPtrW
Definition: winuser.h:4804
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
static LRESULT APIENTRY ACLBoxSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static LPOLESTR
Definition: stg_prop.c:27
#define IID_PPV_ARG(Itype, ppType)
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI DestroyWindow(_In_ HWND)
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
#define VK_RETURN
Definition: winuser.h:2176
WPARAM wParam
Definition: combotst.c:138
HANDLE WINAPI RemovePropW(_In_ HWND, _In_ LPCWSTR)
#define EM_GETSEL
Definition: winuser.h:1979
#define LB_RESETCONTENT
Definition: winuser.h:2037
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define VK_UP
Definition: winuser.h:2200
virtual HRESULT STDMETHODCALLTYPE ResetEnumerator()
#define LBS_NOINTEGRALHEIGHT
Definition: pedump.c:686
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define CB_SHOWDROPDOWN
Definition: winuser.h:1952
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
ULONG Release()
#define CW_USEDEFAULT
Definition: winuser.h:225
#define S_FALSE
Definition: winerror.h:2357
#define GWLP_USERDATA
Definition: treelist.c:63
#define E_INVALIDARG
Definition: ddrawi.h:101
const WCHAR * str
smooth NULL
Definition: ftsmooth.c:416
static HWND hwndParent
Definition: cryptui.c:300
LONG_PTR LPARAM
Definition: windef.h:208
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(_In_z_ const wchar_t *_Str, _In_ wchar_t _Ch)
#define LB_GETTEXTLEN
Definition: winuser.h:2032
virtual HRESULT WINAPI GetOptions(DWORD *pdwFlag)
#define LB_GETCOUNT
Definition: winuser.h:2020
#define WM_SETTEXT
Definition: winuser.h:1599
WCHAR * quickComplete
Definition: CAutoComplete.h:40
#define VK_DELETE
Definition: winuser.h:2208
#define b
Definition: ke_i.h:79
#define WM_DESTROY
Definition: winuser.h:1591
SHORT WINAPI GetKeyState(_In_ int)
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define TRACE(s)
Definition: solgame.cpp:4
#define WM_KILLFOCUS
Definition: winuser.h:1596
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4254
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
#define WINAPI
Definition: msvc.h:8
#define EM_SETSEL
Definition: winuser.h:2000
#define WM_KEYUP
Definition: winuser.h:1698
virtual HRESULT STDMETHODCALLTYPE Skip(ULONG celt)
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define WC_LISTBOXW
Definition: commctrl.h:4707
unsigned long DWORD
Definition: ntddk_ex.h:95
#define LB_CARETOFF
Definition: undocuser.h:51
ULONG AddRef()
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define LB_GETTEXT
Definition: winuser.h:2031
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
HKEY key
Definition: reg.c:42
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define VK_BACK
Definition: winuser.h:2173
virtual HRESULT WINAPI Enable(BOOL fEnable)
enum IAutoComplete2::_tagAUTOCOMPLETEOPTIONS AUTOCOMPLETEOPTIONS
GLsizei const GLfloat * value
Definition: glext.h:6069
virtual HRESULT STDMETHODCALLTYPE Next(ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched)
#define LB_GETITEMHEIGHT
Definition: winuser.h:2024
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define GWLP_WNDPROC
Definition: treelist.c:66
#define VK_RIGHT
Definition: winuser.h:2201
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2881
AUTOCOMPLETEOPTIONS options
Definition: CAutoComplete.h:42
HWND hwndEdit
Definition: combotst.c:65
HWND WINAPI GetParent(_In_ HWND)
#define S_OK
Definition: intsafe.h:59
#define WS_BORDER
Definition: pedump.c:625
#define LBS_NOTIFY
Definition: pedump.c:678
#define LB_ITEMFROMPOINT
Definition: winuser.h:2036
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1408
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define E_NOTIMPL
Definition: ddrawi.h:99
virtual HRESULT STDMETHODCALLTYPE Clone(IEnumString **ppenum)
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define HWND_DESKTOP
Definition: winuser.h:1195
#define min(a, b)
Definition: monoChain.cc:55
#define LB_GETCURSEL
Definition: winuser.h:2021
unsigned int UINT
Definition: ndis.h:50
#define WM_MOUSEMOVE
Definition: winuser.h:1757
#define WS_VSCROLL
Definition: pedump.c:627
WNDPROC wpOrigEditProc
Definition: CAutoComplete.h:37
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define SWP_SHOWWINDOW
Definition: winuser.h:1233
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define VK_CONTROL
Definition: winuser.h:2178
#define E_UNEXPECTED
Definition: winerror.h:2456
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define msg(x)
Definition: auth_time.c:54
#define GWLP_HINSTANCE
Definition: winuser.h:850
WCHAR * txtbackup
Definition: CAutoComplete.h:39
GLuint res
Definition: glext.h:9613
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
unsigned int ULONG
Definition: retypes.h:1
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SetWindowLongPtrW
Definition: winuser.h:5321
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LONG_PTR LRESULT
Definition: windef.h:209
GLuint64EXT * result
Definition: glext.h:11304
virtual HRESULT WINAPI SetOptions(DWORD dwFlag)
static const WCHAR autocomplete_propertyW[]
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:404
LPARAM lParam
Definition: combotst.c:139
void CreateListbox()
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:402
#define APIENTRY
Definition: api.h:79
#define SUCCEEDED(hr)
Definition: intsafe.h:57
Definition: path.c:42
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12