ReactOS 0.4.16-dev-1142-g8029339
addresseditbox.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Explorer
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: The combo box of the address band
5 * COPYRIGHT: Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
6 * Copyright 2023-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#include "precomp.h"
10
11/*
12TODO:
13 Add drag and drop of icon in edit box
14 Handle change notifies to update appropriately
15*/
16
18 fCombobox(WC_COMBOBOXEXW, this),
19 fEditWindow(WC_EDITW, this),
20 fSite(NULL)
21{
22}
23
25{
26}
27
29{
30 if (!pOwner)
31 {
32 CComPtr<IBrowserService> browserService;
34 if (SUCCEEDED(hResult))
35 AtlUnadvise(browserService, DIID_DWebBrowserEvents, fAdviseCookie);
36 fSite = NULL;
37 }
38 // connect to browser connection point
39 return 0;
40}
41
43{
44 return E_NOTIMPL;
45}
46
48{
49 return E_NOTIMPL;
50}
51
52HRESULT STDMETHODCALLTYPE CAddressEditBox::Init(HWND comboboxEx, HWND editControl, long param14, IUnknown *param18)
53{
54 CComPtr<IBrowserService> browserService;
55
56 fCombobox.SubclassWindow(comboboxEx);
57 fEditWindow.SubclassWindow(editControl);
58 fSite = param18;
59 hComboBoxEx = comboboxEx;
60
62
63 // take advice to watch events
64 HRESULT hResult = IUnknown_QueryService(param18, SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService));
65 if (SUCCEEDED(hResult))
66 {
67 hResult = AtlAdvise(browserService, static_cast<IDispatch *>(this), DIID_DWebBrowserEvents, &fAdviseCookie);
68 }
69
70 return hResult;
71}
72
74{
75 m_pidlLastParsed.Free();
76 m_pidlLastParsed.Attach(ILCreateFromPathW(pszPath));
78}
79
81{
82 pszText.Free();
84 if (!pszText.Allocate(cchMax))
85 return FALSE;
86 return fCombobox.GetWindowText(pszText, cchMax);
87}
88
90{
91 /* Get the current pidl of the browser */
92 CComHeapPtr<ITEMIDLIST> absolutePIDL;
93 HRESULT hr = GetAbsolutePidl(&absolutePIDL);
95 return hr;
96
97 /* Fill the combobox */
98 ATLASSERT(absolutePIDL != NULL);
99 PopulateComboBox(absolutePIDL);
100
101 /* Get pShellFolder and pidlChild */
102 CComPtr<IShellFolder> pShellFolder;
103 PCITEMID_CHILD pidlChild;
104 hr = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &pShellFolder), &pidlChild);
106 return hr;
107
108 /* Get ready to set the displayed item */
110 item.iItem = -1; /* -1 to specify the displayed item */
111 item.iImage = SHMapPIDLToSystemImageListIndex(pShellFolder, pidlChild, &item.iSelectedImage);
112
113 /* Set the path if filesystem; otherwise use the name */
114 WCHAR szPathOrName[MAX_PATH];
115 SHGDNF flags = SHGDN_FORADDRESSBAR;
117 flags |= SHGDN_FORPARSING;
118
119 if (SUCCEEDED(IEGetNameAndFlags(absolutePIDL, flags, szPathOrName, _countof(szPathOrName), NULL)))
120 item.pszText = szPathOrName;
121
122 /* Ownership of absolutePIDL will be moved to fCombobox. See CBEN_DELETEITEM */
123 item.lParam = reinterpret_cast<LPARAM>(absolutePIDL.Detach());
124
125 fCombobox.SendMessage(CBEM_SETITEM, 0, reinterpret_cast<LPARAM>(&item)); /* Set it! */
126 return S_OK;
127}
128
130{
132 HRESULT hr = IUnknown_QueryService(fSite, SID_STopLevelBrowser, IID_PPV_ARG(IBrowserService, &isb));
134 return hr;
135
136 hr = isb->GetPidl(pAbsolutePIDL);
138 return hr;
139
140 return S_OK;
141}
142
143/* Execute command line from address bar */
145{
146 /* Get command line */
147 CComHeapPtr<WCHAR> pszCmdLine;
148 if (!GetComboBoxText(pszCmdLine))
149 return FALSE;
150
151 /* Split 1st parameter from trailing arguments */
152 PWCHAR args = PathGetArgsW(pszCmdLine);
153 PathRemoveArgsW(pszCmdLine);
154
155 PathUnquoteSpacesW(pszCmdLine); /* Unquote the 1st parameter */
156
157 /* Get ready for execution */
158 SHELLEXECUTEINFOW info = { sizeof(info), SEE_MASK_FLAG_NO_UI, m_hWnd };
159 info.lpFile = pszCmdLine;
160 info.lpParameters = args;
161 info.nShow = SW_SHOWNORMAL;
162
163 /* Set current directory */
164 WCHAR dir[MAX_PATH] = L"";
166 if (SUCCEEDED(GetAbsolutePidl(&pidl)))
167 {
169 info.lpDirectory = dir;
170 }
171
172 if (!::ShellExecuteExW(&info)) /* Execute! */
173 return FALSE;
174
176 return TRUE;
177}
178
180{
181 ULONG eaten, attributes;
184 CComPtr<IShellFolder> psfCurrent;
185 HRESULT hr;
186
188
192 return hr;
193
194 HWND topLevelWindow;
195 hr = IUnknown_GetWindow(pbs, &topLevelWindow);
197 return hr;
198
199 /* Get the path to browse and expand it if needed */
202 return E_FAIL;
203
204 INT addressLength = (wcschr(input, L'%') ? ::SHExpandEnvironmentStringsW(input, NULL, 0) : 0);
205 if (addressLength <= 0 ||
206 !address.Allocate(addressLength + 1) ||
208 {
209 address.Free();
210 address.Attach(input.Detach());
211 }
212
213 /* Try to parse a relative path and if it fails, try to browse an absolute path */
214 CComPtr<IShellFolder> psfDesktop;
215 hr = SHGetDesktopFolder(&psfDesktop);
217 return hr;
218
219 hr = pbs->GetPidl(&pidlCurrent);
221 goto parseabsolute;
222
223 hr = psfDesktop->BindToObject(pidlCurrent, NULL, IID_PPV_ARG(IShellFolder, &psfCurrent));
225 goto parseabsolute;
226
227 hr = psfCurrent->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &pidlRelative, &attributes);
228 if (SUCCEEDED(hr))
229 {
230 m_pidlLastParsed.Attach(ILCombine(pidlCurrent, pidlRelative));
231 return hr;
232 }
233
234parseabsolute:
235 /* We couldn't parse a relative path, attempt to parse an absolute path */
236 hr = psfDesktop->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &m_pidlLastParsed, &attributes);
237 return hr;
238}
239
241{
244 return E_FAIL;
245
247
248 return hRet;
249}
250
252{
253 BOOL bParsedForExec = FALSE;
254 HRESULT hr;
255
256 /*
257 * Parse the path if it wasn't parsed
258 */
259 if (!m_pidlLastParsed)
260 {
261 hr = ParseNow(0);
262
263 /* If the destination path doesn't exist then display an error message */
265 {
266 if (ExecuteCommandLine())
267 return S_OK;
268
270 }
271
272 if (!m_pidlLastParsed)
273 return E_FAIL;
274 bParsedForExec = TRUE;
275 }
276
277 /*
278 * Get the IShellBrowser and IBrowserService interfaces of the shell browser
279 */
283 return hr;
284
285 /*
286 * Get the current pidl of the shellbrowser and check if it is the same with the parsed one
287 */
288 PIDLIST_ABSOLUTE pidl;
289 hr = GetAbsolutePidl(&pidl);
291 {
292 m_pidlLastParsed.Free();
293 return hr;
294 }
295
296 BOOL bEqual = ILIsEqual(pidl, m_pidlLastParsed);
297 ILFree(pidl);
298 if (bEqual)
299 {
300 m_pidlLastParsed.Free();
301 return S_OK;
302 }
303
304 /*
305 * Attempt to browse to the parsed pidl
306 */
307 hr = pisb->BrowseObject(m_pidlLastParsed, 0);
308 if (SUCCEEDED(hr))
309 return hr;
310
311 /*
312 * Browsing to the pidl failed so it's not a folder. So invoke its default command.
313 */
314 HWND hWnd;
315 if (FAILED(IUnknown_GetWindow(pisb, &hWnd)))
316 hWnd = NULL;
317
318 LPCITEMIDLIST pidlChild;
321 if (SUCCEEDED(hr))
322 hr = SHInvokeDefaultCommand(hWnd, sf, pidlChild);
323
324 if (bParsedForExec)
325 m_pidlLastParsed.Free(); // Throw away the non-folder item we just parsed
326
327 RefreshAddress(); // Set the address back to a valid folder
328 return hr;
329}
330
332{
333 return E_NOTIMPL;
334}
335
337 HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
338{
339 LPNMHDR hdr;
340
341 if (theResult)
342 *theResult = 0;
343
344 switch (uMsg)
345 {
346 case WM_COMMAND:
347 {
349 {
351 PIDLIST_ABSOLUTE pidl =
353 m_pidlLastParsed.Free();
354 if (pidl)
355 m_pidlLastParsed.Attach(ILClone(pidl));
356
357 Execute(0);
358 }
359 break;
360 }
361 case WM_NOTIFY:
362 {
363 hdr = (LPNMHDR) lParam;
364 if (hdr->code == CBEN_ENDEDIT)
365 {
366 NMCBEENDEDITW *endEdit = (NMCBEENDEDITW*) lParam;
367 if (endEdit->iWhy == CBENF_RETURN)
368 {
369 Execute(0);
370 }
371 else if (endEdit->iWhy == CBENF_ESCAPE)
372 {
373 /* Reset the contents of the combo box */
375 }
376 }
377 else if (hdr->code == CBEN_DELETEITEM)
378 {
380 LPITEMIDLIST itemPidl = (LPITEMIDLIST)pCBEx->ceItem.lParam;
381 if (itemPidl)
382 {
383 ILFree(itemPidl);
384 }
385 }
386 break;
387 }
388 }
389 return S_OK;
390}
391
393{
394 if (fCombobox.m_hWnd == hWnd)
395 return S_OK;
396 if (fEditWindow.m_hWnd == hWnd)
397 return S_OK;
398 return S_FALSE;
399}
400
402 const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
403{
404 return E_NOTIMPL;
405}
406
408 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
409{
410 return E_NOTIMPL;
411}
412
414{
415 return E_NOTIMPL;
416}
417
419{
420 return E_NOTIMPL;
421}
422
424 REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
425{
426 return E_NOTIMPL;
427}
428
430 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
431{
432 if (pDispParams == NULL)
433 return E_INVALIDARG;
434
435 switch (dispIdMember)
436 {
439 m_pidlLastParsed.Free();
441 break;
442 }
443 return S_OK;
444}
445
447{
448 if (pClassID == NULL)
449 return E_POINTER;
450 *pClassID = CLSID_AddressEditBox;
451 return S_OK;
452}
453
455{
456 return E_NOTIMPL;
457}
458
460{
461 return E_NOTIMPL;
462}
463
465{
466 return E_NOTIMPL;
467}
468
470{
471 return E_NOTIMPL;
472}
473
475{
476 HRESULT hr;
477 LPITEMIDLIST pidl;
478 int indent = 0;
479 int index;
480
482 for (int i = 0; i < index; i++)
485
486 /* Calculate the indent level. No need to clone the pidl */
487 pidl = pidlCurrent;
488 do
489 {
490 if(!pidl->mkid.cb)
491 break;
492 pidl = ILGetNext(pidl);
493 indent++;
494 } while (pidl);
495 index = indent;
496
497 /* Add every id from the pidl in the combo box */
498 pidl = ILClone(pidlCurrent);
499 do
500 {
501 AddComboBoxItem(pidl, 0, index);
502 ILRemoveLastID(pidl);
503 index--;
504 } while (index >= 0);
505 ILFree(pidl);
506
507 /* Add the items of the desktop */
508 FillOneLevel(0, 1, indent);
509
510 /* Add the items of My Computer */
513 return;
514
516 {
517 if (ILIsEqual(i, pidl))
518 {
520 break;
521 }
522 index++;
523 }
524 ILFree(pidl);
525}
526
528{
529 HRESULT hr;
530 WCHAR buf[4096];
531
532 LPCITEMIDLIST pidlChild;
534 hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
536 return;
537
538 STRRET strret;
539 hr = sf->GetDisplayNameOf(pidlChild, SHGDN_FORADDRESSBAR, &strret);
541 return;
542
543 hr = StrRetToBufW(&strret, pidlChild, buf, 4095);
545 return;
546
547 COMBOBOXEXITEMW item = {0};
549 item.iImage = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &item.iSelectedImage);
550 item.pszText = buf;
551 item.lParam = (LPARAM)(ILClone(pidl));
552 item.iIndent = indent;
553 item.iItem = index;
555}
556
557void CAddressEditBox::FillOneLevel(int index, int levelIndent, int indent)
558{
559 HRESULT hr;
560 ULONG numObj;
561 int count;
562 LPITEMIDLIST pidl, pidl2, pidl3, pidl4;
563
564 count = index + 1;
565 pidl = GetItemData(index);
566 pidl2 = GetItemData(count);
567 if(pidl)
568 {
569 CComPtr<IShellFolder> psfDesktop;
570 CComPtr<IShellFolder> psfItem;
571
572 hr = SHGetDesktopFolder(&psfDesktop);
574 return;
575
576 if (!pidl->mkid.cb)
577 {
578 psfItem = psfDesktop;
579 }
580 else
581 {
582 hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, &psfItem));
584 return;
585 }
586
587 CComPtr<IEnumIDList> pEnumIDList;
588 hr = psfItem->EnumObjects(0, SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, &pEnumIDList);
590 return;
591
592 do
593 {
594 hr = pEnumIDList->Next(1, &pidl3, &numObj);
595 if(hr != S_OK || !numObj)
596 break;
597
598 pidl4 = ILCombine(pidl, pidl3);
599 if (pidl2 && ILIsEqual(pidl4, pidl2))
600 count += (indent - levelIndent);
601 else
602 AddComboBoxItem(pidl4, count, levelIndent);
603 count++;
604 ILFree(pidl3);
605 ILFree(pidl4);
606 } while (true);
607 }
608}
609
611{
613
614 memset(&item, 0, sizeof(COMBOBOXEXITEMW));
615 item.mask = CBEIF_LPARAM;
616 item.iItem = index;
618 return (LPITEMIDLIST)item.lParam;
619}
620
622{
624 return NO_ERROR;
625}
#define ATLASSERT(x)
Definition: CComVariant.cpp:10
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
UINT cchMax
unsigned int dir
Definition: maze.c:112
HWND hWnd
Definition: settings.c:17
#define index(s, c)
Definition: various.h:29
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
BOOL SubclassWindow(HWND hWnd)
Definition: atlwin.h:1796
int GetWindowTextLength() const
Definition: atlwin.h:860
int GetWindowText(_Out_writes_to_(nMaxCount, return+1) LPTSTR lpszStringBuf, _In_ int nMaxCount) const
Definition: atlwin.h:828
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1116
HWND m_hWnd
Definition: atlwin.h:273
STDMETHOD() GetClassID(CLSID *pClassID) override
HRESULT RefreshAddress()
STDMETHOD() GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override
void FillOneLevel(int index, int levelIndent, int indent)
CContainedWindow fEditWindow
HRESULT GetAbsolutePidl(PIDLIST_ABSOLUTE *pAbsolutePIDL)
STDMETHOD() ParseNow(long paramC) override
CContainedWindow fCombobox
CComPtr< IUnknown > fSite
CComHeapPtr< ITEMIDLIST_ABSOLUTE > m_pidlLastParsed
HRESULT STDMETHODCALLTYPE ShowFileNotFoundError(HRESULT hRet)
STDMETHOD() SetCurrentDir(PCWSTR pszPath) override
STDMETHOD() Init(HWND comboboxEx, HWND editControl, long param14, IUnknown *param18) override
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
LPITEMIDLIST GetItemData(int index)
STDMETHOD() GetTypeInfoCount(UINT *pctinfo) override
STDMETHOD() Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() IsWindowOwner(HWND hWnd) override
void AddComboBoxItem(LPITEMIDLIST pidl, int index, int indent)
STDMETHOD() Save(long paramC) override
STDMETHOD() SetOwner(IUnknown *) override
STDMETHOD() Execute(long paramC) override
STDMETHOD() IsDirty() override
void PopulateComboBox(LPITEMIDLIST pidl)
STDMETHOD() OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) override
STDMETHOD() Load(IStream *pStm) override
STDMETHOD() Refresh(long param8) override
BOOL GetComboBoxText(CComHeapPtr< WCHAR > &pszText)
STDMETHOD() GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override
STDMETHOD() GetSizeMax(ULARGE_INTEGER *pcbSize) override
STDMETHOD() FileSysChange(long param8, long paramC) override
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
void Free()
Definition: atlalloc.h:153
T * Detach()
Definition: atlalloc.h:168
bool Allocate(_In_ size_t nElements=1)
Definition: atlalloc.h:143
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NO_ERROR
Definition: dderror.h:5
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID *iid, DWORD *pdw)
Definition: atl.c:45
HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID *iid, DWORD dw)
Definition: atl.c:73
#define IDS_PARSE_ADDR_ERR_TITLE
Definition: resource.h:184
#define IDS_PARSE_ADDR_ERR_TEXT
Definition: resource.h:185
CabinetStateSettings gCabinetState
Definition: settings.cpp:10
static const WCHAR indent[]
Definition: object.c:1156
#define wcschr
Definition: compat.h:17
#define MAX_PATH
Definition: compat.h:34
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:68
#define ShellMessageBoxW
Definition: precomp.h:63
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3384
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:3060
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
void WINAPI PathRemoveArgsW(LPWSTR lpszPath)
Definition: path.c:779
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1040
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1729
LPWSTR WINAPI PathGetArgsW(LPCWSTR lpszPath)
Definition: path.c:506
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint address
Definition: glext.h:9393
GLuint index
Definition: glext.h:6031
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
GLenum GLenum GLenum input
Definition: glext.h:9031
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:772
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
char hdr[14]
Definition: iptest.cpp:33
if(dx< 0)
Definition: linetemp.h:194
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:52
static ATOM item
Definition: dde.c:856
unsigned int UINT
Definition: ndis.h:50
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:816
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1497
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1489
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
Definition: pidl.c:1101
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:582
#define INT
Definition: polytest.cpp:20
#define CBEM_SETITEM
Definition: commctrl.h:3851
#define CBEN_ENDEDIT
Definition: commctrl.h:3890
#define CBEIF_IMAGE
Definition: commctrl.h:3792
#define CBENF_RETURN
Definition: commctrl.h:3893
#define WC_EDITW
Definition: commctrl.h:4692
#define CBEM_GETITEMW
Definition: commctrl.h:3848
#define CBEIF_SELECTEDIMAGE
Definition: commctrl.h:3793
#define WC_COMBOBOXEXW
Definition: commctrl.h:3786
#define CBEIF_TEXT
Definition: commctrl.h:3791
#define CBENF_ESCAPE
Definition: commctrl.h:3894
#define CBEM_DELETEITEM
Definition: commctrl.h:3836
#define CBEN_DELETEITEM
Definition: commctrl.h:3878
#define CBEIF_INDENT
Definition: commctrl.h:3795
#define CBEM_INSERTITEMW
Definition: commctrl.h:3846
#define CBEIF_LPARAM
Definition: commctrl.h:3796
#define PNMCOMBOBOXEX
Definition: commctrl.h:3873
#define REFIID
Definition: guiddef.h:118
#define WM_NOTIFY
Definition: richedit.h:61
DWORD LCID
Definition: nls.h:13
#define memset(x, y, z)
Definition: compat.h:39
#define SEE_MASK_FLAG_NO_UI
Definition: shellapi.h:36
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2474
HRESULT hr
Definition: shlfolder.c:183
#define SID_SShellBrowser
Definition: shlguid.h:128
#define CSIDL_DRIVES
Definition: shlobj.h:2197
HRESULT WINAPI SHAutoComplete(HWND hwndEdit, DWORD dwFlags)
Definition: autocomp.cpp:191
#define SHACF_FILESYSTEM
Definition: shlwapi.h:1957
#define SHACF_USETAB
Definition: shlwapi.h:1961
#define SHACF_URLALL
Definition: shlwapi.h:1960
DWORD WINAPI SHExpandEnvironmentStringsW(LPCWSTR, LPWSTR, DWORD)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
ITEMIDLIST_ABSOLUTE * PIDLIST_ABSOLUTE
Definition: shtypes.idl:60
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
Definition: match.c:390
const uint16_t * PCWSTR
Definition: typedefs.h:57
int32_t INT
Definition: typedefs.h:58
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
#define DISPID_DOCUMENTCOMPLETE
Definition: webchild.h:61
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define S_FALSE
Definition: winerror.h:2357
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define E_POINTER
Definition: winerror.h:2365
#define ERROR_INVALID_DRIVE
Definition: winerror.h:118
#define SW_SHOWNORMAL
Definition: winuser.h:781
#define WM_COMMAND
Definition: winuser.h:1751
#define CB_RESETCONTENT
Definition: winuser.h:1970
#define CB_GETCOUNT
Definition: winuser.h:1953
#define CBN_SELCHANGE
Definition: winuser.h:1990
#define MB_ICONERROR
Definition: winuser.h:798
struct tagNMHDR * LPNMHDR
#define CB_GETITEMDATA
Definition: winuser.h:1961
#define MB_OK
Definition: winuser.h:801
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define CB_GETCURSEL
Definition: winuser.h:1954
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180