ReactOS 0.4.15-dev-7131-ge4d03f4
addresseditbox.cpp
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
5 * Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22/*
23This class handles the combo box of the address band.
24*/
25
26#include "precomp.h"
27
28/*
29TODO:
30 Add drag and drop of icon in edit box
31 Handle change notifies to update appropriately
32*/
33
35 fCombobox(WC_COMBOBOXEXW, this),
36 fEditWindow(WC_EDITW, this),
37 fSite(NULL),
38 pidlLastParsed(NULL)
39{
40}
41
43{
46}
47
49{
50 if (!pOwner)
51 {
52 CComPtr<IBrowserService> browserService;
54 if (SUCCEEDED(hResult))
55 AtlUnadvise(browserService, DIID_DWebBrowserEvents, fAdviseCookie);
56 fSite = NULL;
57 }
58 // connect to browser connection point
59 return 0;
60}
61
63{
64 return E_NOTIMPL;
65}
66
68{
69 return E_NOTIMPL;
70}
71
72HRESULT STDMETHODCALLTYPE CAddressEditBox::Init(HWND comboboxEx, HWND editControl, long param14, IUnknown *param18)
73{
74 CComPtr<IBrowserService> browserService;
75
76 fCombobox.SubclassWindow(comboboxEx);
77 fEditWindow.SubclassWindow(editControl);
78 fSite = param18;
79 hComboBoxEx = comboboxEx;
80
82
83 // take advice to watch events
84 HRESULT hResult = IUnknown_QueryService(param18, SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService));
85 if (SUCCEEDED(hResult))
86 {
87 hResult = AtlAdvise(browserService, static_cast<IDispatch *>(this), DIID_DWebBrowserEvents, &fAdviseCookie);
88 }
89
90 return hResult;
91}
92
94{
95 return E_NOTIMPL;
96}
97
99{
100 pszText.Free();
102 if (!pszText.Allocate(cchMax))
103 return FALSE;
104 return fCombobox.GetWindowText(pszText, cchMax);
105}
106
108{
109 /* Get the current pidl of the browser */
110 CComHeapPtr<ITEMIDLIST> absolutePIDL;
111 HRESULT hr = GetAbsolutePidl(&absolutePIDL);
113 return hr;
114
115 /* Fill the combobox */
116 ATLASSERT(absolutePIDL != NULL);
117 PopulateComboBox(absolutePIDL);
118
119 /* Get pShellFolder and pidlChild */
120 CComPtr<IShellFolder> pShellFolder;
121 PCITEMID_CHILD pidlChild;
122 hr = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &pShellFolder), &pidlChild);
124 return hr;
125
126 /* Get ready to set the displayed item */
128 item.iItem = -1; /* -1 to specify the displayed item */
129 item.iImage = SHMapPIDLToSystemImageListIndex(pShellFolder, pidlChild, &item.iSelectedImage);
130
131 /* Set the path if filesystem; otherwise use the name */
132 WCHAR szPathOrName[MAX_PATH];
133 SHGDNF flags = SHGDN_FORADDRESSBAR;
135 flags |= SHGDN_FORPARSING;
136
137 if (SUCCEEDED(IEGetNameAndFlags(absolutePIDL, flags, szPathOrName, _countof(szPathOrName), NULL)))
138 item.pszText = szPathOrName;
139
140 /* Ownership of absolutePIDL will be moved to fCombobox. See CBEN_DELETEITEM */
141 item.lParam = reinterpret_cast<LPARAM>(absolutePIDL.Detach());
142
143 fCombobox.SendMessage(CBEM_SETITEM, 0, reinterpret_cast<LPARAM>(&item)); /* Set it! */
144 return S_OK;
145}
146
148{
150 HRESULT hr = IUnknown_QueryService(fSite, SID_STopLevelBrowser, IID_PPV_ARG(IBrowserService, &isb));
152 return hr;
153
154 hr = isb->GetPidl(pAbsolutePIDL);
156 return hr;
157
158 return S_OK;
159}
160
161/* Execute command line from address bar */
163{
164 /* Get command line */
165 CComHeapPtr<WCHAR> pszCmdLine;
166 if (!GetComboBoxText(pszCmdLine))
167 return FALSE;
168
169 /* Split 1st parameter from trailing arguments */
170 PWCHAR args = PathGetArgsW(pszCmdLine);
171 PathRemoveArgsW(pszCmdLine);
172
173 PathUnquoteSpacesW(pszCmdLine); /* Unquote the 1st parameter */
174
175 /* Get ready for execution */
176 SHELLEXECUTEINFOW info = { sizeof(info), SEE_MASK_FLAG_NO_UI, m_hWnd };
177 info.lpFile = pszCmdLine;
178 info.lpParameters = args;
179 info.nShow = SW_SHOWNORMAL;
180
181 /* Set current directory */
182 WCHAR dir[MAX_PATH] = L"";
184 if (SUCCEEDED(GetAbsolutePidl(&pidl)))
185 {
187 info.lpDirectory = dir;
188 }
189
190 if (!::ShellExecuteExW(&info)) /* Execute! */
191 return FALSE;
192
194 return TRUE;
195}
196
198{
199 ULONG eaten;
200 ULONG attributes;
201 HRESULT hr;
202 HWND topLevelWindow;
203 PIDLIST_ABSOLUTE pidlCurrent= NULL;
204 PIDLIST_RELATIVE pidlRelative = NULL;
205 CComPtr<IShellFolder> psfCurrent;
206
210 return hr;
211
212 hr = IUnknown_GetWindow(pbs, &topLevelWindow);
214 return hr;
215
216 /* Get the path to browse and expand it if needed */
219 return E_FAIL;
220
221 INT addressLength = (wcschr(input, L'%') ? ::SHExpandEnvironmentStringsW(input, NULL, 0) : 0);
222 if (addressLength <= 0 ||
223 !address.Allocate(addressLength + 1) ||
225 {
226 address.Free();
227 address.Attach(input.Detach());
228 }
229
230 /* Try to parse a relative path and if it fails, try to browse an absolute path */
231 CComPtr<IShellFolder> psfDesktop;
232 hr = SHGetDesktopFolder(&psfDesktop);
234 goto cleanup;
235
236 hr = pbs->GetPidl(&pidlCurrent);
238 goto parseabsolute;
239
240 hr = psfDesktop->BindToObject(pidlCurrent, NULL, IID_PPV_ARG(IShellFolder, &psfCurrent));
242 goto parseabsolute;
243
244 hr = psfCurrent->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &pidlRelative, &attributes);
245 if (SUCCEEDED(hr))
246 {
247 pidlLastParsed = ILCombine(pidlCurrent, pidlRelative);
248 ILFree(pidlRelative);
249 goto cleanup;
250 }
251
252parseabsolute:
253 /* We couldn't parse a relative path, attempt to parse an absolute path */
254 hr = psfDesktop->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &pidlLastParsed, &attributes);
255
256cleanup:
257 if (pidlCurrent)
258 ILFree(pidlCurrent);
259 return hr;
260}
261
263{
266 return E_FAIL;
267
269
270 return hRet;
271}
272
274{
275 HRESULT hr;
276
277 /*
278 * Parse the path if it wasn't parsed
279 */
280 if (!pidlLastParsed)
281 {
282 hr = ParseNow(0);
283
284 /* If the destination path doesn't exist then display an error message */
286 {
287 if (ExecuteCommandLine())
288 return S_OK;
289
291 }
292
293 if (!pidlLastParsed)
294 return E_FAIL;
295 }
296
297 /*
298 * Get the IShellBrowser and IBrowserService interfaces of the shell browser
299 */
302 if (FAILED(hr))
303 return hr;
304
305 /*
306 * Get the current pidl of the shellbrowser and check if it is the same with the parsed one
307 */
308 PIDLIST_ABSOLUTE pidl;
309 hr = GetAbsolutePidl(&pidl);
310 if (FAILED(hr))
311 return hr;
312
314 hr = SHGetDesktopFolder(&psf);
315 if (FAILED(hr))
316 return hr;
317
318 hr = psf->CompareIDs(0, pidl, pidlLastParsed);
319
320 SHFree(pidl);
321 if (hr == 0)
322 return S_OK;
323
324 /*
325 * Attempt to browse to the parsed pidl
326 */
327 hr = pisb->BrowseObject(pidlLastParsed, 0);
328 if (SUCCEEDED(hr))
329 return hr;
330
331 /*
332 * Browsing to the pidl failed so it's not a folder. So invoke its defaule command.
333 */
334 HWND topLevelWindow;
335 hr = IUnknown_GetWindow(pisb, &topLevelWindow);
336 if (FAILED(hr))
337 return hr;
338
339 LPCITEMIDLIST pidlChild;
342 if (FAILED(hr))
343 return hr;
344
345 hr = SHInvokeDefaultCommand(topLevelWindow, sf, pidlChild);
346 if (FAILED(hr))
347 return hr;
348
349 return hr;
350}
351
353{
354 return E_NOTIMPL;
355}
356
358 HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
359{
360 LPNMHDR hdr;
361
362 if (theResult)
363 *theResult = 0;
364
365 switch (uMsg)
366 {
367 case WM_COMMAND:
368 {
370 {
371 UINT selectedIndex = SendMessageW((HWND)lParam, CB_GETCURSEL, 0, 0);
373 Execute(0);
374 }
375 break;
376 }
377 case WM_NOTIFY:
378 {
379 hdr = (LPNMHDR) lParam;
380 if (hdr->code == CBEN_ENDEDIT)
381 {
382 NMCBEENDEDITW *endEdit = (NMCBEENDEDITW*) lParam;
383 if (endEdit->iWhy == CBENF_RETURN)
384 {
385 Execute(0);
386 }
387 else if (endEdit->iWhy == CBENF_ESCAPE)
388 {
389 /* Reset the contents of the combo box */
391 }
392 }
393 else if (hdr->code == CBEN_DELETEITEM)
394 {
396 LPITEMIDLIST itemPidl = (LPITEMIDLIST)pCBEx->ceItem.lParam;
397 if (itemPidl)
398 {
399 ILFree(itemPidl);
400 }
401 }
402 break;
403 }
404 }
405 return S_OK;
406}
407
409{
410 if (fCombobox.m_hWnd == hWnd)
411 return S_OK;
412 if (fEditWindow.m_hWnd == hWnd)
413 return S_OK;
414 return S_FALSE;
415}
416
418 const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
419{
420 return E_NOTIMPL;
421}
422
424 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
425{
426 return E_NOTIMPL;
427}
428
430{
431 return E_NOTIMPL;
432}
433
435{
436 return E_NOTIMPL;
437}
438
440 REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
441{
442 return E_NOTIMPL;
443}
444
446 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
447{
448 if (pDispParams == NULL)
449 return E_INVALIDARG;
450
451 switch (dispIdMember)
452 {
455 if (pidlLastParsed)
456 {
459 }
460
462 break;
463 }
464 return S_OK;
465}
466
468{
469 if (pClassID == NULL)
470 return E_POINTER;
471 *pClassID = CLSID_AddressEditBox;
472 return S_OK;
473}
474
476{
477 return E_NOTIMPL;
478}
479
481{
482 return E_NOTIMPL;
483}
484
486{
487 return E_NOTIMPL;
488}
489
491{
492 return E_NOTIMPL;
493}
494
496{
497 HRESULT hr;
498 LPITEMIDLIST pidl;
499 int indent = 0;
500 int index;
501
503 for (int i = 0; i < index; i++)
506
507 /* Calculate the indent level. No need to clone the pidl */
508 pidl = pidlCurrent;
509 do
510 {
511 if(!pidl->mkid.cb)
512 break;
513 pidl = ILGetNext(pidl);
514 indent++;
515 } while (pidl);
516 index = indent;
517
518 /* Add every id from the pidl in the combo box */
519 pidl = ILClone(pidlCurrent);
520 do
521 {
522 AddComboBoxItem(pidl, 0, index);
523 ILRemoveLastID(pidl);
524 index--;
525 } while (index >= 0);
526 ILFree(pidl);
527
528 /* Add the items of the desktop */
529 FillOneLevel(0, 1, indent);
530
531 /* Add the items of My Computer */
534 return;
535
537 {
538 if (ILIsEqual(i, pidl))
539 {
541 break;
542 }
543 index++;
544 }
545 ILFree(pidl);
546}
547
549{
550 HRESULT hr;
551 WCHAR buf[4096];
552
553 LPCITEMIDLIST pidlChild;
555 hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
557 return;
558
559 STRRET strret;
560 hr = sf->GetDisplayNameOf(pidlChild, SHGDN_FORADDRESSBAR, &strret);
562 return;
563
564 hr = StrRetToBufW(&strret, pidlChild, buf, 4095);
566 return;
567
568 COMBOBOXEXITEMW item = {0};
570 item.iImage = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &item.iSelectedImage);
571 item.pszText = buf;
572 item.lParam = (LPARAM)(ILClone(pidl));
573 item.iIndent = indent;
574 item.iItem = index;
576}
577
578void CAddressEditBox::FillOneLevel(int index, int levelIndent, int indent)
579{
580 HRESULT hr;
581 ULONG numObj;
582 int count;
583 LPITEMIDLIST pidl, pidl2, pidl3, pidl4;
584
585 count = index + 1;
586 pidl = GetItemData(index);
587 pidl2 = GetItemData(count);
588 if(pidl)
589 {
590 CComPtr<IShellFolder> psfDesktop;
591 CComPtr<IShellFolder> psfItem;
592
593 hr = SHGetDesktopFolder(&psfDesktop);
595 return;
596
597 if (!pidl->mkid.cb)
598 {
599 psfItem = psfDesktop;
600 }
601 else
602 {
603 hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, &psfItem));
605 return;
606 }
607
608 CComPtr<IEnumIDList> pEnumIDList;
609 hr = psfItem->EnumObjects(0, SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, &pEnumIDList);
611 return;
612
613 do
614 {
615 hr = pEnumIDList->Next(1, &pidl3, &numObj);
616 if(hr != S_OK || !numObj)
617 break;
618
619 pidl4 = ILCombine(pidl, pidl3);
620 if (pidl2 && ILIsEqual(pidl4, pidl2))
621 count += (indent - levelIndent);
622 else
623 AddComboBoxItem(pidl4, count, levelIndent);
624 count++;
625 ILFree(pidl3);
626 ILFree(pidl4);
627 } while (true);
628 }
629}
630
632{
634
635 memset(&item, 0, sizeof(COMBOBOXEXITEMW));
636 item.mask = CBEIF_LPARAM;
637 item.iItem = index;
639 return (LPITEMIDLIST)item.lParam;
640}
641
643{
645 return NO_ERROR;
646}
#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
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
HRESULT RefreshAddress()
virtual HRESULT STDMETHODCALLTYPE FileSysChange(long param8, long paramC)
void FillOneLevel(int index, int levelIndent, int indent)
CContainedWindow fEditWindow
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
HRESULT GetAbsolutePidl(PIDLIST_ABSOLUTE *pAbsolutePIDL)
virtual HRESULT STDMETHODCALLTYPE SetOwner(IUnknown *)
virtual HRESULT STDMETHODCALLTYPE IsDirty()
CContainedWindow fCombobox
CComPtr< IUnknown > fSite
virtual HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize)
HRESULT STDMETHODCALLTYPE ShowFileNotFoundError(HRESULT hRet)
virtual HRESULT STDMETHODCALLTYPE ParseNow(long paramC)
virtual HRESULT STDMETHODCALLTYPE SetCurrentDir(long paramC)
LPITEMIDLIST GetItemData(int index)
virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
virtual HRESULT STDMETHODCALLTYPE Save(long paramC)
virtual HRESULT STDMETHODCALLTYPE Load(IStream *pStm)
LPITEMIDLIST pidlLastParsed
virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
void AddComboBoxItem(LPITEMIDLIST pidl, int index, int indent)
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo)
virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND hWnd)
void PopulateComboBox(LPITEMIDLIST pidl)
BOOL GetComboBoxText(CComHeapPtr< WCHAR > &pszText)
virtual HRESULT STDMETHODCALLTYPE Execute(long paramC)
virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID)
virtual HRESULT STDMETHODCALLTYPE Init(HWND comboboxEx, HWND editControl, long param14, IUnknown *param18)
virtual HRESULT STDMETHODCALLTYPE Refresh(long param8)
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_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:182
#define IDS_PARSE_ADDR_ERR_TEXT
Definition: resource.h:183
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:122
static void cleanup(void)
Definition: main.c:1335
#define ShellMessageBoxW
Definition: precomp.h:59
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3194
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1497
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:2977
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1332
void WINAPI PathRemoveArgsW(LPWSTR lpszPath)
Definition: path.c:779
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1034
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1723
LPWSTR WINAPI PathGetArgsW(LPCWSTR lpszPath)
Definition: path.c:506
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1522
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:783
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:228
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:929
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:703
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:212
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1352
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1344
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:855
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:539
#define CBEM_SETITEM
Definition: commctrl.h:3846
#define CBEN_ENDEDIT
Definition: commctrl.h:3885
#define CBEIF_IMAGE
Definition: commctrl.h:3787
#define CBENF_RETURN
Definition: commctrl.h:3888
#define WC_EDITW
Definition: commctrl.h:4687
#define CBEM_GETITEMW
Definition: commctrl.h:3843
#define CBEIF_SELECTEDIMAGE
Definition: commctrl.h:3788
#define WC_COMBOBOXEXW
Definition: commctrl.h:3781
#define CBEIF_TEXT
Definition: commctrl.h:3786
#define CBENF_ESCAPE
Definition: commctrl.h:3889
#define CBEM_DELETEITEM
Definition: commctrl.h:3831
#define CBEN_DELETEITEM
Definition: commctrl.h:3873
#define CBEIF_INDENT
Definition: commctrl.h:3790
#define CBEM_INSERTITEMW
Definition: commctrl.h:3841
#define CBEIF_LPARAM
Definition: commctrl.h:3791
#define PNMCOMBOBOXEX
Definition: commctrl.h:3868
#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:2368
HRESULT hr
Definition: shlfolder.c:183
#define SID_SShellBrowser
Definition: shlguid.h:128
#define CSIDL_DRIVES
Definition: shlobj.h:2107
HRESULT WINAPI SHAutoComplete(HWND hwndEdit, DWORD dwFlags)
Definition: autocomp.cpp:191
#define SHACF_FILESYSTEM
Definition: shlwapi.h:1912
#define SHACF_USETAB
Definition: shlwapi.h:1916
#define SHACF_URLALL
Definition: shlwapi.h:1915
DWORD WINAPI SHExpandEnvironmentStringsW(LPCWSTR, LPWSTR, DWORD)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:68
Definition: match.c:390
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:769
#define WM_COMMAND
Definition: winuser.h:1739
#define CB_RESETCONTENT
Definition: winuser.h:1958
#define CB_GETCOUNT
Definition: winuser.h:1941
#define CBN_SELCHANGE
Definition: winuser.h:1978
#define MB_ICONERROR
Definition: winuser.h:786
struct tagNMHDR * LPNMHDR
#define CB_GETITEMDATA
Definition: winuser.h:1949
#define MB_OK
Definition: winuser.h:789
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define CB_GETCURSEL
Definition: winuser.h:1942
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180