ReactOS 0.4.16-dev-737-g3368adc
childwnd.c
Go to the documentation of this file.
1/*
2 * Regedit child window
3 *
4 * Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
5 * Copyright (C) 2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
7 */
8
9#include "regedit.h"
10#include <shldisp.h>
11#include <shlguid.h>
12
14static int last_split;
18
20{
21 if (ppv)
22 *ppv = NULL;
24 {
25 *ppv = This;
26 return S_OK;
27 }
28 return E_NOINTERFACE;
29}
30
32{
33 return 1;
34}
35
36static HRESULT WINAPI DummyEnumStringsNext(LPVOID This, ULONG celt, LPWSTR *parr, ULONG *pceltFetched)
37{
38 if (pceltFetched)
39 *pceltFetched = 0;
40 return S_FALSE;
41}
42
44{
45 return S_OK;
46}
47
49{
50 return S_OK;
51}
52
54{
55 return E_NOTIMPL;
56}
57
68};
69
74};
75
77{
78 if (hRootKey == HKEY_CLASSES_ROOT) return L"HKEY_CLASSES_ROOT";
79 if (hRootKey == HKEY_CURRENT_USER) return L"HKEY_CURRENT_USER";
80 if (hRootKey == HKEY_LOCAL_MACHINE) return L"HKEY_LOCAL_MACHINE";
81 if (hRootKey == HKEY_USERS) return L"HKEY_USERS";
82 if (hRootKey == HKEY_CURRENT_CONFIG) return L"HKEY_CURRENT_CONFIG";
83 if (hRootKey == HKEY_DYN_DATA) return L"HKEY_DYN_DATA";
84
85 return L"UNKNOWN HKEY, PLEASE REPORT";
86}
87
89{
90 RECT rc;
91 GetClientRect(hWnd, &rc);
92 return min(max(x, SPLIT_MIN), rc.right - SPLIT_MIN);
93}
94
95extern void ResizeWnd(int cx, int cy)
96{
97 HDWP hdwp = BeginDeferWindowPos(4);
98 RECT rt, rs, rb;
99 const int nButtonWidth = 44;
100 const int nButtonHeight = 22;
101 int cyEdge = GetSystemMetrics(SM_CYEDGE);
103 SetRect(&rt, 0, 0, cx, cy);
104 cy = 0;
105 if (hStatusBar != NULL)
106 {
108 cy = rs.bottom - rs.top;
109 }
111
113
115 if (hdwp)
117 rt.left, rt.top,
118 rt.right - rt.left - nButtonWidth, nButtonHeight,
119 uFlags);
120 if (hdwp)
122 rt.right - nButtonWidth, rt.top,
123 nButtonWidth, nButtonHeight,
124 uFlags);
125 if (hdwp)
127 rt.left,
128 rt.top + nButtonHeight + cyEdge,
130 rt.bottom - rt.top - cy - 2 * cyEdge,
131 uFlags);
132 if (hdwp)
134 rt.left + cx,
135 rt.top + nButtonHeight + cyEdge,
136 rt.right - cx,
137 rt.bottom - rt.top - cy - 2 * cyEdge,
138 uFlags);
139 if (hdwp)
140 EndDeferWindowPos(hdwp);
141}
142
143/*******************************************************************************
144 * Local module support methods
145 */
146
147static void draw_splitbar(HWND hWnd, int x)
148{
149 RECT rt;
150 HGDIOBJ OldObj;
151 HDC hdc = GetDC(hWnd);
152
153 if(!SizingPattern)
154 {
155 const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
156 SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
157 }
158 if(!SizingBrush)
159 {
161 }
162 GetClientRect(hWnd, &rt);
163 rt.left = x - SPLIT_WIDTH/2;
164 rt.right = x + SPLIT_WIDTH/2+1;
165 OldObj = SelectObject(hdc, SizingBrush);
166 PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
167 SelectObject(hdc, OldObj);
169}
170
174static void finish_splitbar(HWND hWnd, int x)
175{
176 RECT rt;
177
179 last_split = -1;
180 GetClientRect(hWnd, &rt);
182 ResizeWnd(rt.right, rt.bottom);
183 InvalidateRect(hWnd, &rt, FALSE); // HACK: See CORE-19576
185}
186
187/*******************************************************************************
188 *
189 * Key suggestion
190 */
191
192#define MIN(a,b) ((a < b) ? (a) : (b))
193
194static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions,
195 size_t iSuggestionsLength)
196{
197 WCHAR szBuffer[256];
198 WCHAR szLastFound[256];
199 size_t i;
200 HKEY hOtherKey, hSubKey;
201 BOOL bFound;
203
204 memset(pszSuggestions, 0, iSuggestionsLength * sizeof(*pszSuggestions));
205 iSuggestionsLength--;
206
207 /* Are we a root key in HKEY_CLASSES_ROOT? */
208 if ((hRootKey == HKEY_CLASSES_ROOT) && pszKeyPath[0] && !wcschr(pszKeyPath, L'\\'))
209 {
210 do
211 {
212 bFound = FALSE;
213
214 /* Check default key */
215 if (QueryStringValue(hRootKey, pszKeyPath, NULL,
216 szBuffer, ARRAY_SIZE(szBuffer)) == ERROR_SUCCESS)
217 {
218 /* Sanity check this key; it cannot be empty, nor can it be a
219 * loop back */
220 if ((szBuffer[0] != L'\0') && _wcsicmp(szBuffer, pszKeyPath))
221 {
222 if (RegOpenKeyExW(hRootKey, szBuffer, 0, regsam, &hOtherKey) == ERROR_SUCCESS)
223 {
224 lstrcpynW(pszSuggestions, L"HKCR\\", (int) iSuggestionsLength);
225 i = wcslen(pszSuggestions);
226 pszSuggestions += i;
227 iSuggestionsLength -= i;
228
229 lstrcpynW(pszSuggestions, szBuffer, (int) iSuggestionsLength);
230 i = MIN(wcslen(pszSuggestions) + 1, iSuggestionsLength);
231 pszSuggestions += i;
232 iSuggestionsLength -= i;
233 RegCloseKey(hOtherKey);
234
235 bFound = TRUE;
236 StringCbCopyW(szLastFound, sizeof(szLastFound), szBuffer);
237 pszKeyPath = szLastFound;
238 }
239 }
240 }
241 }
242 while(bFound && (iSuggestionsLength > 0));
243
244 /* Check CLSID key */
245 if (RegOpenKeyExW(hRootKey, pszKeyPath, 0, regsam, &hSubKey) == ERROR_SUCCESS)
246 {
247 if (QueryStringValue(hSubKey, L"CLSID", NULL, szBuffer,
248 ARRAY_SIZE(szBuffer)) == ERROR_SUCCESS)
249 {
250 lstrcpynW(pszSuggestions, L"HKCR\\CLSID\\", (int)iSuggestionsLength);
251 i = wcslen(pszSuggestions);
252 pszSuggestions += i;
253 iSuggestionsLength -= i;
254
255 lstrcpynW(pszSuggestions, szBuffer, (int)iSuggestionsLength);
256 i = MIN(wcslen(pszSuggestions) + 1, iSuggestionsLength);
257 pszSuggestions += i;
258 iSuggestionsLength -= i;
259 }
260 RegCloseKey(hSubKey);
261 }
262 }
263 else if ((hRootKey == HKEY_CURRENT_USER || hRootKey == HKEY_LOCAL_MACHINE) && *pszKeyPath)
264 {
265 LPCWSTR rootstr = hRootKey == HKEY_CURRENT_USER ? L"HKLM" : L"HKCU";
266 hOtherKey = hRootKey == HKEY_CURRENT_USER ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
267 if (RegOpenKeyExW(hOtherKey, pszKeyPath, 0, regsam, &hSubKey) == ERROR_SUCCESS)
268 {
269 int cch;
270 RegCloseKey(hSubKey);
271 cch = _snwprintf(pszSuggestions, iSuggestionsLength, L"%s\\%s", rootstr, pszKeyPath);
272 if (cch <= 0 || cch > iSuggestionsLength)
273 pszSuggestions[0] = UNICODE_NULL;
274 }
275 }
276}
277
279{
280 WNDPROC oldwndproc;
281 static WCHAR s_szNode[256];
283
284 switch (uMsg)
285 {
286 case WM_KEYUP:
287 if (wParam == VK_RETURN)
288 {
289 GetWindowTextW(hwnd, s_szNode, ARRAY_SIZE(s_szNode));
290 SelectNode(g_pChildWnd->hTreeWnd, s_szNode);
291 }
292 break;
293 default:
294 break;
295 }
296 return CallWindowProcW(oldwndproc, hwnd, uMsg, wParam, lParam);
297}
298
299VOID
300UpdateAddress(HTREEITEM hItem, HKEY hRootKey, LPCWSTR pszPath, BOOL bSelectNone)
301{
302 LPCWSTR keyPath, rootName;
303 LPWSTR fullPath;
304 DWORD cbFullPath;
305
306 /* Wipe the listview, the status bar and the address bar if the root key was selected */
308 {
312 return;
313 }
314
315 if (pszPath == NULL)
316 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, hItem, &hRootKey);
317 else
318 keyPath = pszPath;
319
320 if (keyPath)
321 {
322 RefreshListView(g_pChildWnd->hListWnd, hRootKey, keyPath, bSelectNone);
323 rootName = get_root_key_name(hRootKey);
324 cbFullPath = (wcslen(rootName) + 1 + wcslen(keyPath) + 1) * sizeof(WCHAR);
325 fullPath = malloc(cbFullPath);
326 if (fullPath)
327 {
328 /* set (correct) the address bar text */
329 if (keyPath[0] != UNICODE_NULL)
330 StringCbPrintfW(fullPath, cbFullPath, L"%s%s%s", rootName,
331 ((keyPath[0] == L'\\') ? L"" : L"\\"), keyPath);
332 else
333 StringCbCopyW(fullPath, cbFullPath, rootName);
334
337 free(fullPath);
338
339 /* disable hive manipulation items temporarily (enable only if necessary) */
342 /* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
343 if (_wcsicmp(rootName, L"HKEY_LOCAL_MACHINE") == 0 ||
344 _wcsicmp(rootName, L"HKEY_USERS") == 0)
345 {
346 /*
347 * enable the unload menu item if at the root, otherwise
348 * enable the load menu item if there is no slash in
349 * keyPath (ie. immediate child selected)
350 */
351 if (keyPath[0] == UNICODE_NULL)
353 else if (!wcschr(keyPath, L'\\'))
355 }
356 }
357 }
358}
359
367{
368 BOOL Result;
369 RECT rc;
370
371 switch (message)
372 {
373 case WM_CREATE:
374 {
375 WNDPROC oldproc;
376 HFONT hFont;
378 DWORD style;
379 IAutoComplete *pAutoComplete;
380
381 /* Load "My Computer" string */
383
385 if (!g_pChildWnd) return 0;
386
388 g_pChildWnd->nSplitPos = 190;
390
391 /* ES_AUTOHSCROLL style enables horizontal scrolling and shrinking */
395 hWnd, (HMENU)0, hInst, 0);
396
399 g_pChildWnd->hAddressBtnWnd = CreateWindowExW(0, L"Button", L"\x00BB", style,
401 hWnd, (HMENU)0, hInst, 0);
403 IMAGE_ICON, 12, 12, 0);
405
406 if (SUCCEEDED(CoCreateInstance(&CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, &IID_IAutoComplete, (void**)&pAutoComplete)))
407 {
408 IAutoComplete_Init(pAutoComplete, g_pChildWnd->hAddressBarWnd, (IUnknown*)&g_DummyEnumStrings, NULL, NULL);
409 IAutoComplete_Release(pAutoComplete);
410 }
411
412 GetClientRect(hWnd, &rc);
416
417 /* set the address bar and button font */
419 {
423 (WPARAM)hFont,
424 0);
427 (WPARAM)hFont,
428 0);
429 }
430 /* Subclass the AddressBar */
434 break;
435 }
436 case WM_COMMAND:
437 if(HIWORD(wParam) == BN_CLICKED)
438 {
440 }
441 break; //goto def;
442 case WM_SETCURSOR:
443 if (LOWORD(lParam) == HTCLIENT)
444 {
445 POINT pt;
449 {
451 return TRUE;
452 }
453 }
454 goto def;
455
456 case WM_DESTROY:
464 break;
465
466 case WM_LBUTTONDOWN:
467 {
468 INT x = (SHORT)LOWORD(lParam);
469 if (x >= g_pChildWnd->nSplitPos - SPLIT_WIDTH / 2 &&
470 x < g_pChildWnd->nSplitPos + SPLIT_WIDTH / 2 + 1)
471 {
474 last_split = x;
476 }
477 break;
478 }
479
480 case WM_LBUTTONUP:
481 case WM_RBUTTONDOWN:
482 if (GetCapture() == hWnd)
483 {
484 INT x = (SHORT)LOWORD(lParam);
487 }
488 break;
489
491 if (GetCapture() == hWnd && last_split >= 0)
493 break;
494
495 case WM_KEYDOWN:
496 if (wParam == VK_ESCAPE)
497 if (GetCapture() == hWnd)
498 {
499 RECT rt;
501 GetClientRect(hWnd, &rt);
502 ResizeWnd(rt.right, rt.bottom);
503 last_split = -1;
506 }
507 break;
508
509 case WM_MOUSEMOVE:
510 if (GetCapture() == hWnd)
511 {
512 INT x = (SHORT)LOWORD(lParam);
514 if (last_split != x)
515 {
517 last_split = x;
519 }
520 }
521 break;
522
523 case WM_SETFOCUS:
524 if (g_pChildWnd != NULL)
525 {
527 }
528 break;
529
530 case WM_NOTIFY:
531 if (g_pChildWnd == NULL) break;
532
533 if (((LPNMHDR)lParam)->idFrom == TREE_WINDOW)
534 {
536 {
537 goto def;
538 }
539
540 return Result;
541 }
542 else
543 {
544 if (((LPNMHDR)lParam)->idFrom == LIST_WINDOW)
545 {
547 {
548 goto def;
549 }
550
551 return Result;
552 }
553 else
554 {
555 goto def;
556 }
557 }
558 break;
559
560 case WM_CONTEXTMENU:
561 {
562 POINT pt;
564 {
565 int i, cnt;
566 BOOL IsDefault;
567 pt.x = (short) LOWORD(lParam);
568 pt.y = (short) HIWORD(lParam);
571 if (pt.x == -1 && pt.y == -1)
572 {
573 RECT rc;
574 if (i != -1)
575 {
576 rc.left = LVIR_BOUNDS;
578 pt.x = rc.left + 8;
579 pt.y = rc.top + 8;
580 }
581 else
582 pt.x = pt.y = 0;
584 }
585 if(i == -1)
586 {
588 }
589 else
590 {
593 IsDefault = IsDefaultValue(g_pChildWnd->hListWnd, i);
594 if(cnt == 1)
596 else
600
602 }
603 }
604 else if ((HWND)wParam == g_pChildWnd->hTreeWnd)
605 {
606 TVHITTESTINFO hti;
607 HMENU hContextMenu;
609 MENUITEMINFOW mii;
610 WCHAR resource[256];
611 WCHAR buffer[256];
612 LPWSTR s;
613 LPCWSTR keyPath;
614 HKEY hRootKey;
615 int iLastPos;
616 WORD wID;
617 BOOL isRoot;
618
619 pt.x = (short) LOWORD(lParam);
620 pt.y = (short) HIWORD(lParam);
621
622 if (pt.x == -1 && pt.y == -1)
623 {
624 RECT rc;
626 if (hti.hItem != NULL)
627 {
629 pt.x = rc.left + 8;
630 pt.y = rc.top + 8;
632 hti.flags = TVHT_ONITEM;
633 }
634 else
635 hti.flags = 0;
636 }
637 else
638 {
639 hti.pt.x = pt.x;
640 hti.pt.y = pt.y;
643 }
644
645 if (hti.flags & TVHT_ONITEM)
646 {
648
649 isRoot = (TreeView_GetParent(g_pChildWnd->hTreeWnd, hti.hItem) == NULL);
650 hContextMenu = GetSubMenu(hPopupMenus, isRoot ? PM_ROOTITEM : PM_TREECONTEXT);
651
652 memset(&item, 0, sizeof(item));
654 item.hItem = hti.hItem;
656
657 /* Set the Expand/Collapse menu item appropriately */
659 memset(&mii, 0, sizeof(mii));
660 mii.cbSize = sizeof(mii);
662 mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
664 mii.dwTypeData = (LPWSTR) buffer;
665 SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
666
667 if (isRoot == FALSE)
668 {
669 /* Remove any existing suggestions */
670 memset(&mii, 0, sizeof(mii));
671 mii.cbSize = sizeof(mii);
672 mii.fMask = MIIM_ID;
673 GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
674 if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
675 {
676 do
677 {
678 iLastPos = GetMenuItemCount(hContextMenu) - 1;
679 GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
680 RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
681 }
682 while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
683 }
684
685 /* Come up with suggestions */
686 keyPath = GetItemPath(g_pChildWnd->hTreeWnd, NULL, &hRootKey);
687 SuggestKeys(hRootKey, keyPath, Suggestions, ARRAY_SIZE(Suggestions));
688 if (Suggestions[0])
689 {
690 AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
691
693
694 s = Suggestions;
696 while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
697 {
698 WCHAR *path = s, buf[MAX_PATH];
699 if (hRootKey == HKEY_CURRENT_USER || hRootKey == HKEY_LOCAL_MACHINE)
700 {
701 // Windows 10 only displays the root name
703 if (next > s)
704 lstrcpynW(path = buf, s, min(next - s, _countof(buf)));
705 }
707
708 memset(&mii, 0, sizeof(mii));
709 mii.cbSize = sizeof(mii);
710 mii.fMask = MIIM_STRING | MIIM_ID;
711 mii.wID = wID++;
712 mii.dwTypeData = buffer;
713 InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
714
715 s += wcslen(s) + 1;
716 }
717 }
718 }
719 TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
720 }
721 }
722 break;
723 }
724
725 case WM_SIZE:
727 {
729 }
730 break;
731
732 default:
733def:
735 }
736 return 0;
737}
Arabic default style
Definition: afstyles.h:94
LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen)
Definition: settings.c:19
HWND hWnd
Definition: settings.c:17
BOOL CreateListView(PMAIN_WND_INFO Info)
Definition: listview.c:355
static void finish_splitbar(HWND hWnd, int x)
Definition: childwnd.c:174
static int last_split
Definition: childwnd.c:14
static void draw_splitbar(HWND hWnd, int x)
Definition: childwnd.c:147
LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:278
HBRUSH SizingBrush
Definition: childwnd.c:16
LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:366
static ULONG WINAPI DummyEnumStringsAddRefRelease(LPVOID This)
Definition: childwnd.c:31
#define MIN(a, b)
Definition: childwnd.c:192
struct DummyEnumStrings g_DummyEnumStrings
ChildWnd * g_pChildWnd
Definition: childwnd.c:13
static HRESULT WINAPI DummyEnumStringsQI(LPVOID This, REFIID riid, void **ppv)
Definition: childwnd.c:19
static INT ClampSplitBarX(HWND hWnd, INT x)
Definition: childwnd.c:88
static HRESULT WINAPI DummyEnumStringsNext(LPVOID This, ULONG celt, LPWSTR *parr, ULONG *pceltFetched)
Definition: childwnd.c:36
LPCWSTR get_root_key_name(HKEY hRootKey)
Definition: childwnd.c:76
static HRESULT WINAPI DummyEnumStringsReset(LPVOID This)
Definition: childwnd.c:48
static HRESULT WINAPI DummyEnumStringsClone(LPVOID This, void **ppv)
Definition: childwnd.c:53
HBITMAP SizingPattern
Definition: childwnd.c:15
struct DummyEnumStringsVtbl g_DummyEnumStringsVtbl
WCHAR Suggestions[256]
Definition: childwnd.c:17
VOID UpdateAddress(HTREEITEM hItem, HKEY hRootKey, LPCWSTR pszPath, BOOL bSelectNone)
Definition: childwnd.c:300
static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions, size_t iSuggestionsLength)
Definition: childwnd.c:194
static HRESULT WINAPI DummyEnumStringsSkip(LPVOID This, ULONG celt)
Definition: childwnd.c:43
void ResizeWnd(int cx, int cy)
Definition: childwnd.c:95
BOOL IsDefaultValue(HWND hwndLV, int i)
Definition: listview.c:95
BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCWSTR keyPath, BOOL bSelectNone)
Definition: listview.c:657
BOOL ListWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
Definition: listview.c:531
void DestroyListView(HWND hwndLV)
Definition: listview.c:641
HMENU hPopupMenus
Definition: main.c:25
HWND hFrameWnd
Definition: main.c:22
void DestroyMainMenu()
Definition: main.c:139
HMENU hMenuFrame
Definition: main.c:24
HWND hStatusBar
Definition: main.c:23
HFONT hFont
Definition: main.c:53
HWND CreateTreeView(HWND hwndParent, LPWSTR pHostName, HMENU id)
Definition: treeview.c:741
#define PM_TREECONTEXT
Definition: main.h:24
BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
Definition: treeview.c:774
#define ARRAY_SIZE(A)
Definition: main.h:20
#define LIST_WINDOW
Definition: main.h:15
#define SPLIT_MIN
Definition: main.h:18
BOOL TreeWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
Definition: treeview.c:622
#define TREE_WINDOW
Definition: main.h:14
#define PM_NEW
Definition: main.h:23
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:73
#define PM_ROOTITEM
Definition: main.h:25
#define PM_MODIFYVALUE
Definition: main.h:22
#define ID_TREE_SUGGESTION_MIN
Definition: resource.h:109
#define IDS_MY_COMPUTER
Definition: resource.h:82
#define IDS_COLLAPSE
Definition: resource.h:144
#define IDI_ARROW
Definition: resource.h:24
#define ID_EDIT_MODIFY
Definition: resource.h:48
#define ID_REGISTRY_UNLOADHIVE
Definition: resource.h:65
#define ID_TREE_EXPANDBRANCH
Definition: resource.h:62
#define ID_TREE_COLLAPSEBRANCH
Definition: resource.h:63
#define IDS_GOTO_SUGGESTED_KEY
Definition: resource.h:147
#define ID_EDIT_MODIFY_BIN
Definition: resource.h:75
#define IDS_EXPAND
Definition: resource.h:143
#define ID_TREE_SUGGESTION_MAX
Definition: resource.h:110
#define ID_EDIT_RENAME
Definition: resource.h:44
#define ID_REGISTRY_LOADHIVE
Definition: resource.h:64
const GUID IID_IUnknown
#define RegCloseKey(hKey)
Definition: registry.h:49
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
wcsncpy
#define E_NOTIMPL
Definition: ddrawi.h:99
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
UINT uFlags
Definition: api.c:59
#define wcschr
Definition: compat.h:17
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define lstrcpynW
Definition: compat.h:738
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
LPWSTR WINAPI PathFindNextComponentW(LPCWSTR lpszPath)
Definition: path.c:2585
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define pt(x, y)
Definition: drawing.c:79
HINSTANCE hInst
Definition: dxdiag.c:13
#define SPLIT_WIDTH
Definition: eventvwr.c:45
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLdouble s
Definition: gl.h:2039
GLuint buffer
Definition: glext.h:5915
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
static HICON
Definition: imagelist.c:80
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static ATOM item
Definition: dde.c:856
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define KEY_ENUMERATE_SUB_KEYS
Definition: nt_native.h:1019
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
const GUID IID_IEnumString
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_TABSTOP
Definition: pedump.c:634
#define ES_AUTOHSCROLL
Definition: pedump.c:672
#define WS_VISIBLE
Definition: pedump.c:620
short SHORT
Definition: pedump.c:59
#define BS_DEFPUSHBUTTON
Definition: pedump.c:652
static VOID DestroyTreeView(HWND hTreeView)
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
#define TreeView_SelectItem(hwnd, hitem)
Definition: commctrl.h:3486
#define TVHT_ONITEM
Definition: commctrl.h:3532
#define LVNI_SELECTED
Definition: commctrl.h:2429
#define LVNI_FOCUSED
Definition: commctrl.h:2428
_Out_opt_ int * cx
Definition: commctrl.h:585
#define TreeView_GetParent(hwnd, hitem)
Definition: commctrl.h:3474
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2439
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3478
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3495
#define TreeView_GetItemRect(hwnd, hitem, prc, code)
Definition: commctrl.h:3434
#define ListView_GetSelectedCount(hwndLV)
Definition: commctrl.h:2714
#define LVM_GETITEMRECT
Definition: commctrl.h:2482
#define ListView_DeleteAllItems(hwnd)
Definition: commctrl.h:2419
#define TVIS_EXPANDED
Definition: commctrl.h:3289
#define SB_SETTEXTW
Definition: commctrl.h:1947
#define TVIF_CHILDREN
Definition: commctrl.h:3277
#define TreeView_HitTest(hwnd, lpht)
Definition: commctrl.h:3518
#define TVIF_STATE
Definition: commctrl.h:3274
#define LVIR_BOUNDS
Definition: commctrl.h:2477
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
static unsigned __int64 next
Definition: rand_nt.c:6
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_NOTIFY
Definition: richedit.h:61
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define memset(x, y, z)
Definition: compat.h:39
#define _countof(array)
Definition: sndvol32.h:70
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:557
Definition: main.h:48
int nSplitPos
Definition: main.h:56
WCHAR szPath[MAX_PATH]
Definition: main.h:58
HWND hAddressBtnWnd
Definition: main.h:53
int nFocusPanel
Definition: main.h:55
HICON hArrowIcon
Definition: main.h:54
HWND hTreeWnd
Definition: main.h:50
HWND hListWnd
Definition: main.h:51
HWND hAddressBarWnd
Definition: main.h:52
HWND hWnd
Definition: main.h:49
struct DummyEnumStringsVtbl * lpVtbl
Definition: childwnd.c:71
Definition: tftpd.h:60
LPWSTR dwTypeData
Definition: winuser.h:3272
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
HTREEITEM hItem
Definition: commctrl.h:3526
#define max(a, b)
Definition: svc.c:63
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_WNDPROC
Definition: treelist.c:66
#define GWLP_USERDATA
Definition: treelist.c:63
uint32_t DWORD_PTR
Definition: typedefs.h:65
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
_In_ size_t cnt
Definition: wcstombs.cpp:43
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1394
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
HGDIOBJ WINAPI GetStockObject(_In_ int)
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
#define PATINVERT
Definition: wingdi.h:328
#define DEFAULT_GUI_FONT
Definition: wingdi.h:909
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
HBRUSH WINAPI CreatePatternBrush(_In_ HBITMAP)
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
#define HKEY_DYN_DATA
Definition: winreg.h:16
#define HKEY_CURRENT_USER
Definition: winreg.h:11
ACCESS_MASK REGSAM
Definition: winreg.h:69
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define HKEY_USERS
Definition: winreg.h:13
HWND WINAPI SetCapture(_In_ HWND hWnd)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define SWP_NOACTIVATE
Definition: winuser.h:1245
#define MF_BYCOMMAND
Definition: winuser.h:202
#define MIIM_STRING
Definition: winuser.h:730
#define SM_CYEDGE
Definition: winuser.h:1012
#define MIIM_ID
Definition: winuser.h:725
#define WM_KEYUP
Definition: winuser.h:1719
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IMAGE_ICON
Definition: winuser.h:212
#define AppendMenu
Definition: winuser.h:5743
#define WM_CAPTURECHANGED
Definition: winuser.h:1811
#define TPM_RIGHTBUTTON
Definition: winuser.h:2383
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1611
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define BS_ICON
Definition: winuser.h:264
#define WM_SIZE
Definition: winuser.h:1614
#define WM_COMMAND
Definition: winuser.h:1743
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2289
#define IDC_ARROW
Definition: winuser.h:687
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2756
#define InsertMenuItem
Definition: winuser.h:5816
#define WM_SETFOCUS
Definition: winuser.h:1616
#define SetMenuItemInfo
Definition: winuser.h:5862
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define WM_MOUSEMOVE
Definition: winuser.h:1778
HWND WINAPI GetCapture(void)
Definition: message.c:2881
#define SIZE_MINIMIZED
Definition: winuser.h:2509
#define WM_LBUTTONDOWN
Definition: winuser.h:1779
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2191
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define MIIM_STATE
Definition: winuser.h:724
#define MFS_DEFAULT
Definition: winuser.h:751
#define BM_SETIMAGE
Definition: winuser.h:1925
#define WM_RBUTTONDOWN
Definition: winuser.h:1782
#define WM_SETTEXT
Definition: winuser.h:1620
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define VK_RETURN
Definition: winuser.h:2204
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
HWND WINAPI SetFocus(_In_opt_ HWND)
#define MF_ENABLED
Definition: winuser.h:128
#define MFS_GRAYED
Definition: winuser.h:754
#define MF_SEPARATOR
Definition: winuser.h:137
#define BS_FLAT
Definition: winuser.h:280
#define WM_SETFONT
Definition: winuser.h:1653
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 MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define HTCLIENT
Definition: winuser.h:2478
#define BS_VCENTER
Definition: winuser.h:279
HDC WINAPI GetDC(_In_opt_ HWND)
#define WM_LBUTTONUP
Definition: winuser.h:1780
#define CW_USEDEFAULT
Definition: winuser.h:225
#define WM_SETCURSOR
Definition: winuser.h:1639
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define BN_CLICKED
Definition: winuser.h:1928
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define WM_DESTROY
Definition: winuser.h:1612
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define WM_KEYDOWN
Definition: winuser.h:1718
#define BS_CENTER
Definition: winuser.h:260
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2909
#define SWP_NOZORDER
Definition: winuser.h:1250
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDC_SIZEWE
Definition: winuser.h:694
#define GetMenuItemInfo
Definition: winuser.h:5800
#define VK_ESCAPE
Definition: winuser.h:2217
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
HDWP WINAPI BeginDeferWindowPos(_In_ int)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2139
#define MF_GRAYED
Definition: winuser.h:129
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define MF_DISABLED
Definition: winuser.h:130
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185