ReactOS  0.4.13-dev-464-g6b95727
CAutoComplete Class Reference

#include <CAutoComplete.h>

Inheritance diagram for CAutoComplete:
Collaboration diagram for CAutoComplete:

Public Member Functions

 CAutoComplete ()
 
 ~CAutoComplete ()
 
void CreateListbox ()
 
virtual HRESULT WINAPI Enable (BOOL fEnable)
 
virtual HRESULT WINAPI Init (HWND hwndEdit, IUnknown *punkACL, LPCOLESTR pwzsRegKeyPath, LPCOLESTR pwszQuickComplete)
 
virtual HRESULT WINAPI GetOptions (DWORD *pdwFlag)
 
virtual HRESULT WINAPI SetOptions (DWORD dwFlag)
 
virtual HRESULT STDMETHODCALLTYPE GetDropDownStatus (DWORD *pdwFlags, LPWSTR *ppwszString)
 
virtual HRESULT STDMETHODCALLTYPE ResetEnumerator ()
 
virtual HRESULT STDMETHODCALLTYPE Next (ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched)
 
virtual HRESULT STDMETHODCALLTYPE Skip (ULONG celt)
 
virtual HRESULT STDMETHODCALLTYPE Reset ()
 
virtual HRESULT STDMETHODCALLTYPE Clone (IEnumString **ppenum)
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
- Public Member Functions inherited from IEnumString
HRESULT RemoteNext ([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLESTR *rgelt, [out] ULONG *pceltFetched)
 

Static Public Member Functions

static LRESULT APIENTRY ACEditSubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static LRESULT APIENTRY ACLBoxSubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 

Private Attributes

BOOL enabled
 
BOOL initialized
 
HWND hwndEdit
 
HWND hwndListBox
 
WNDPROC wpOrigEditProc
 
WNDPROC wpOrigLBoxProc
 
WCHARtxtbackup
 
WCHARquickComplete
 
CComPtr< IEnumStringenumstr
 
AUTOCOMPLETEOPTIONS options
 

Additional Inherited Members

- Public Types inherited from IAutoComplete2
enum  _tagAUTOCOMPLETEOPTIONS {
  ACO_NONE = 0x00, ACO_AUTOSUGGEST = 0x01, ACO_AUTOAPPEND = 0x02, ACO_SEARCH = 0x04,
  ACO_FILTERPREFIXES = 0x08, ACO_USETAB = 0x10, ACO_UPDOWNKEYDROPSLIST = 0x20, ACO_RTLREADING = 0x40
}
 
typedef IAutoComplete2LPAUTOCOMPLETE2
 
typedef enum IAutoComplete2::_tagAUTOCOMPLETEOPTIONS AUTOCOMPLETEOPTIONS
 
- Public Types inherited from IAutoComplete
typedef IAutoCompleteLPAUTOCOMPLETE
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IEnumString
typedef IEnumStringLPENUMSTRING
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 25 of file CAutoComplete.h.

Constructor & Destructor Documentation

◆ CAutoComplete()

CAutoComplete::CAutoComplete ( )

Definition at line 47 of file CAutoComplete.cpp.

48 {
49  enabled = TRUE;
53  hwndListBox = NULL;
54  txtbackup = NULL;
56  hwndEdit = NULL;
58 }
#define TRUE
Definition: types.h:120
WNDPROC wpOrigLBoxProc
Definition: CAutoComplete.h:38
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
smooth NULL
Definition: ftsmooth.c:416
WCHAR * quickComplete
Definition: CAutoComplete.h:40
WNDPROC wpOrigEditProc
Definition: CAutoComplete.h:37
WCHAR * txtbackup
Definition: CAutoComplete.h:39

◆ ~CAutoComplete()

CAutoComplete::~CAutoComplete ( )

Definition at line 63 of file CAutoComplete.cpp.

64 {
65  TRACE(" destroying IAutoComplete(%p)\n", this);
70  if (hwndListBox)
72 }
BOOL WINAPI DestroyWindow(_In_ HWND)
HANDLE WINAPI RemovePropW(_In_ HWND, _In_ LPCWSTR)
WCHAR * quickComplete
Definition: CAutoComplete.h:40
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
#define GWLP_WNDPROC
Definition: treelist.c:66
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
WNDPROC wpOrigEditProc
Definition: CAutoComplete.h:37
WCHAR * txtbackup
Definition: CAutoComplete.h:39
#define SetWindowLongPtrW
Definition: winuser.h:5215
static const WCHAR autocomplete_propertyW[]
#define HeapFree(x, y, z)
Definition: compat.h:394

Member Function Documentation

◆ ACEditSubclassProc()

LRESULT APIENTRY CAutoComplete::ACEditSubclassProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 265 of file CAutoComplete.cpp.

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 }
#define LB_SETCURSEL
Definition: winuser.h:2024
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
const uint16_t * PCWSTR
Definition: typedefs.h:55
#define TRUE
Definition: types.h:120
HRESULT hr
Definition: shlfolder.c:183
#define LB_ADDSTRING
Definition: winuser.h:1992
#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
_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:2178
#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:2181
CComPtr< IEnumString > enumstr
Definition: CAutoComplete.h:41
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
static LPOLESTR
Definition: stg_prop.c:27
#define VK_RETURN
Definition: winuser.h:2155
WPARAM wParam
Definition: combotst.c:138
#define EM_GETSEL
Definition: winuser.h:1958
#define LB_RESETCONTENT
Definition: winuser.h:2016
#define VK_UP
Definition: winuser.h:2179
unsigned int BOOL
Definition: ntddk_ex.h:94
#define CB_SHOWDROPDOWN
Definition: winuser.h:1931
ULONG Release()
const WCHAR * str
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define LB_GETTEXTLEN
Definition: winuser.h:2011
#define LB_GETCOUNT
Definition: winuser.h:1999
#define WM_SETTEXT
Definition: winuser.h:1599
WCHAR * quickComplete
Definition: CAutoComplete.h:40
#define VK_DELETE
Definition: winuser.h:2187
#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:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
#define swprintf(buf, format,...)
Definition: sprintf.c:56
#define EM_SETSEL
Definition: winuser.h:1979
#define WM_KEYUP
Definition: winuser.h:1692
unsigned long DWORD
Definition: ntddk_ex.h:95
#define LB_CARETOFF
Definition: undocuser.h:51
_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:2010
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define VK_BACK
Definition: winuser.h:2152
#define LB_GETITEMHEIGHT
Definition: winuser.h:2003
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define VK_RIGHT
Definition: winuser.h:2180
AUTOCOMPLETEOPTIONS options
Definition: CAutoComplete.h:42
#define S_OK
Definition: intsafe.h:59
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1378
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HWND_DESKTOP
Definition: winuser.h:1195
#define min(a, b)
Definition: monoChain.cc:55
#define LB_GETCURSEL
Definition: winuser.h:2000
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:2157
#define msg(x)
Definition: auth_time.c:54
WCHAR * txtbackup
Definition: CAutoComplete.h:39
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
unsigned int ULONG
Definition: retypes.h:1
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)
WCHAR * LPWSTR
Definition: xmlstorage.h:184
static const WCHAR autocomplete_propertyW[]
LPARAM lParam
Definition: combotst.c:139
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394

Referenced by Init().

◆ ACLBoxSubclassProc()

LRESULT APIENTRY CAutoComplete::ACLBoxSubclassProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 510 of file CAutoComplete.cpp.

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 }
#define LB_SETCURSEL
Definition: winuser.h:2024
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define WM_LBUTTONDOWN
Definition: winuser.h:1752
#define SW_HIDE
Definition: winuser.h:762
UINT_PTR WPARAM
Definition: windef.h:207
WNDPROC wpOrigLBoxProc
Definition: CAutoComplete.h:38
#define GetWindowLongPtrW
Definition: winuser.h:4698
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
WPARAM wParam
Definition: combotst.c:138
#define GWLP_USERDATA
Definition: treelist.c:63
LONG_PTR LPARAM
Definition: windef.h:208
#define LB_GETTEXTLEN
Definition: winuser.h:2011
#define WM_SETTEXT
Definition: winuser.h:1599
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define EM_SETSEL
Definition: winuser.h:1979
#define LB_GETTEXT
Definition: winuser.h:2010
GLenum GLsizei len
Definition: glext.h:6722
#define LB_ITEMFROMPOINT
Definition: winuser.h:2015
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LB_GETCURSEL
Definition: winuser.h:2000
#define WM_MOUSEMOVE
Definition: winuser.h:1751
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define msg(x)
Definition: auth_time.c:54
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LPARAM lParam
Definition: combotst.c:139
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394

Referenced by CreateListbox().

◆ Clone()

HRESULT STDMETHODCALLTYPE CAutoComplete::Clone ( IEnumString **  ppenum)
virtual

Implements IEnumString.

Definition at line 613 of file CAutoComplete.cpp.

614 {
615  FIXME("(%p, %p): stub\n", this, ppOut);
616  *ppOut = NULL;
617  return E_NOTIMPL;
618 }
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ CreateListbox()

void CAutoComplete::CreateListbox ( )

Definition at line 91 of file CAutoComplete.cpp.

92 {
94 
95  /* FIXME : The listbox should be resizable with the mouse. WS_THICKFRAME looks ugly */
101 
102  if (hwndListBox)
103  {
106  }
107 }
#define LBS_HASSTRINGS
Definition: pedump.c:684
WNDPROC wpOrigLBoxProc
Definition: CAutoComplete.h:38
#define WS_CHILD
Definition: pedump.c:617
#define GetWindowLongPtrW
Definition: winuser.h:4698
static LRESULT APIENTRY ACLBoxSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define LBS_NOINTEGRALHEIGHT
Definition: pedump.c:686
#define CW_USEDEFAULT
Definition: winuser.h:225
#define GWLP_USERDATA
Definition: treelist.c:63
smooth NULL
Definition: ftsmooth.c:416
static HWND hwndParent
Definition: cryptui.c:300
#define WC_LISTBOXW
Definition: commctrl.h:4682
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)
#define GWLP_WNDPROC
Definition: treelist.c:66
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
HWND WINAPI GetParent(_In_ HWND)
#define WS_BORDER
Definition: pedump.c:625
#define LBS_NOTIFY
Definition: pedump.c:678
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define WS_VSCROLL
Definition: pedump.c:627
#define GWLP_HINSTANCE
Definition: winuser.h:850
#define SetWindowLongPtrW
Definition: winuser.h:5215

Referenced by Init(), and SetOptions().

◆ Enable()

HRESULT WINAPI CAutoComplete::Enable ( BOOL  fEnable)
virtual

Implements IAutoComplete.

Definition at line 77 of file CAutoComplete.cpp.

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 }
HRESULT hr
Definition: shlfolder.c:183
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define S_OK
Definition: intsafe.h:59

◆ GetDropDownStatus()

HRESULT STDMETHODCALLTYPE CAutoComplete::GetDropDownStatus ( DWORD pdwFlags,
LPWSTR ppwszString 
)
virtual

Implements IAutoCompleteDropDown.

Definition at line 559 of file CAutoComplete.cpp.

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 }
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define LB_GETTEXTLEN
Definition: winuser.h:2011
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
#define LB_GETTEXT
Definition: winuser.h:2010
GLenum GLsizei len
Definition: glext.h:6722
#define S_OK
Definition: intsafe.h:59
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LB_GETCURSEL
Definition: winuser.h:2000
BOOL WINAPI IsWindowVisible(_In_ HWND)
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:406

◆ GetOptions()

HRESULT WINAPI CAutoComplete::GetOptions ( DWORD pdwFlag)
virtual

Implements IAutoComplete2.

Definition at line 234 of file CAutoComplete.cpp.

235 {
236  HRESULT hr = S_OK;
237 
238  TRACE("(%p) -> (%p)\n", this, pdwFlag);
239 
240  *pdwFlag = options;
241 
242  return hr;
243 }
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
AUTOCOMPLETEOPTIONS options
Definition: CAutoComplete.h:42
#define S_OK
Definition: intsafe.h:59

◆ Init()

HRESULT WINAPI CAutoComplete::Init ( HWND  hwndEdit,
IUnknown punkACL,
LPCOLESTR  pwzsRegKeyPath,
LPCOLESTR  pwszQuickComplete 
)
virtual

Implements IAutoComplete.

Definition at line 113 of file CAutoComplete.cpp.

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 }
static LRESULT APIENTRY ACEditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define WARN(fmt,...)
Definition: debug.h:111
CComPtr< IEnumString > enumstr
Definition: CAutoComplete.h:41
#define IID_PPV_ARG(Itype, ppType)
#define E_FAIL
Definition: ddrawi.h:102
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define S_FALSE
Definition: winerror.h:2357
#define E_INVALIDARG
Definition: ddrawi.h:101
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(_In_z_ const wchar_t *_Str, _In_ wchar_t _Ch)
WCHAR * quickComplete
Definition: CAutoComplete.h:40
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4254
#define MAX_PATH
Definition: compat.h:26
ULONG AddRef()
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
HKEY key
Definition: reg.c:42
GLenum GLsizei len
Definition: glext.h:6722
GLsizei const GLfloat * value
Definition: glext.h:6069
#define GWLP_WNDPROC
Definition: treelist.c:66
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
#define S_OK
Definition: intsafe.h:59
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
WNDPROC wpOrigEditProc
Definition: CAutoComplete.h:37
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define E_UNEXPECTED
Definition: winerror.h:2456
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
GLuint res
Definition: glext.h:9613
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
#define SetWindowLongPtrW
Definition: winuser.h:5215
GLuint64EXT * result
Definition: glext.h:11304
static const WCHAR autocomplete_propertyW[]
void CreateListbox()
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394
#define SUCCEEDED(hr)
Definition: intsafe.h:57
Definition: path.c:42
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

◆ Next()

HRESULT STDMETHODCALLTYPE CAutoComplete::Next ( ULONG  celt,
LPOLESTR rgelt,
ULONG pceltFetched 
)
virtual

Implements IEnumString.

Definition at line 594 of file CAutoComplete.cpp.

595 {
596  FIXME("(%p, %d, %p, %p): stub\n", this, celt, rgelt, pceltFetched);
597  *pceltFetched = 0;
598  return E_NOTIMPL;
599 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ Reset()

HRESULT STDMETHODCALLTYPE CAutoComplete::Reset ( void  )
virtual

Implements IEnumString.

Definition at line 607 of file CAutoComplete.cpp.

608 {
609  FIXME("(%p): stub\n", this);
610  return E_NOTIMPL;
611 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ResetEnumerator()

HRESULT STDMETHODCALLTYPE CAutoComplete::ResetEnumerator ( )
virtual

Implements IAutoCompleteDropDown.

Definition at line 585 of file CAutoComplete.cpp.

586 {
587  FIXME("(%p): stub\n", this);
588  return E_NOTIMPL;
589 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ SetOptions()

HRESULT WINAPI CAutoComplete::SetOptions ( DWORD  dwFlag)
virtual

Implements IAutoComplete2.

Definition at line 248 of file CAutoComplete.cpp.

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 }
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
enum IAutoComplete2::_tagAUTOCOMPLETEOPTIONS AUTOCOMPLETEOPTIONS
#define S_OK
Definition: intsafe.h:59
void CreateListbox()

◆ Skip()

HRESULT STDMETHODCALLTYPE CAutoComplete::Skip ( ULONG  celt)
virtual

Implements IEnumString.

Definition at line 601 of file CAutoComplete.cpp.

602 {
603  FIXME("(%p, %d): stub\n", this, celt);
604  return E_NOTIMPL;
605 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define E_NOTIMPL
Definition: ddrawi.h:99

Member Data Documentation

◆ enabled

BOOL CAutoComplete::enabled
private

Definition at line 33 of file CAutoComplete.h.

Referenced by ACEditSubclassProc().

◆ enumstr

CComPtr<IEnumString> CAutoComplete::enumstr
private

Definition at line 41 of file CAutoComplete.h.

Referenced by ACEditSubclassProc(), and Init().

◆ hwndEdit

HWND CAutoComplete::hwndEdit
private

◆ hwndListBox

HWND CAutoComplete::hwndListBox
private

◆ initialized

BOOL CAutoComplete::initialized
private

Definition at line 34 of file CAutoComplete.h.

Referenced by CAutoComplete(), and Init().

◆ options

AUTOCOMPLETEOPTIONS CAutoComplete::options
private

Definition at line 42 of file CAutoComplete.h.

Referenced by ACEditSubclassProc(), and GetOptions().

◆ quickComplete

WCHAR* CAutoComplete::quickComplete
private

Definition at line 40 of file CAutoComplete.h.

Referenced by ACEditSubclassProc(), CAutoComplete(), Init(), and ~CAutoComplete().

◆ txtbackup

WCHAR* CAutoComplete::txtbackup
private

Definition at line 39 of file CAutoComplete.h.

Referenced by ACEditSubclassProc(), CAutoComplete(), and ~CAutoComplete().

◆ wpOrigEditProc

WNDPROC CAutoComplete::wpOrigEditProc
private

Definition at line 37 of file CAutoComplete.h.

Referenced by ACEditSubclassProc(), CAutoComplete(), Init(), and ~CAutoComplete().

◆ wpOrigLBoxProc

WNDPROC CAutoComplete::wpOrigLBoxProc
private

Definition at line 38 of file CAutoComplete.h.

Referenced by ACLBoxSubclassProc(), CAutoComplete(), and CreateListbox().


The documentation for this class was generated from the following files: