ReactOS  0.4.12-dev-36-g472787f
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  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "regedit.h"
22 
24 static int last_split;
26 HBRUSH SizingBrush = 0;
27 static WCHAR Suggestions[256];
28 
29 extern LPCWSTR get_root_key_name(HKEY hRootKey)
30 {
31  if (hRootKey == HKEY_CLASSES_ROOT) return L"HKEY_CLASSES_ROOT";
32  if (hRootKey == HKEY_CURRENT_USER) return L"HKEY_CURRENT_USER";
33  if (hRootKey == HKEY_LOCAL_MACHINE) return L"HKEY_LOCAL_MACHINE";
34  if (hRootKey == HKEY_USERS) return L"HKEY_USERS";
35  if (hRootKey == HKEY_CURRENT_CONFIG) return L"HKEY_CURRENT_CONFIG";
36  if (hRootKey == HKEY_DYN_DATA) return L"HKEY_DYN_DATA";
37 
38  return L"UNKNOWN HKEY, PLEASE REPORT";
39 }
40 
41 extern void ResizeWnd(int cx, int cy)
42 {
43  HDWP hdwp = BeginDeferWindowPos(4);
44  RECT rt, rs, rb;
45  const int nButtonWidth = 44;
46  const int nButtonHeight = 22;
47  int cyEdge = GetSystemMetrics(SM_CYEDGE);
49  SetRect(&rt, 0, 0, cx, cy);
50  cy = 0;
51  if (hStatusBar != NULL)
52  {
54  cy = rs.bottom - rs.top;
55  }
56  GetWindowRect(g_pChildWnd->hAddressBtnWnd, &rb);
57  cx = g_pChildWnd->nSplitPos + SPLIT_WIDTH / 2;
58  if (hdwp)
59  hdwp = DeferWindowPos(hdwp, g_pChildWnd->hAddressBarWnd, NULL,
60  rt.left, rt.top,
61  rt.right - rt.left - nButtonWidth, nButtonHeight,
62  uFlags);
63  if (hdwp)
64  hdwp = DeferWindowPos(hdwp, g_pChildWnd->hAddressBtnWnd, NULL,
65  rt.right - nButtonWidth, rt.top,
66  nButtonWidth, nButtonHeight,
67  uFlags);
68  if (hdwp)
69  hdwp = DeferWindowPos(hdwp, g_pChildWnd->hTreeWnd, NULL,
70  rt.left,
71  rt.top + nButtonHeight + cyEdge,
72  g_pChildWnd->nSplitPos - SPLIT_WIDTH/2 - rt.left,
73  rt.bottom - rt.top - cy - 2 * cyEdge,
74  uFlags);
75  if (hdwp)
76  hdwp = DeferWindowPos(hdwp, g_pChildWnd->hListWnd, NULL,
77  rt.left + cx,
78  rt.top + nButtonHeight + cyEdge,
79  rt.right - cx,
80  rt.bottom - rt.top - cy - 2 * cyEdge,
81  uFlags);
82  if (hdwp)
83  EndDeferWindowPos(hdwp);
84 }
85 
86 /*******************************************************************************
87  * Local module support methods
88  */
89 
90 static void draw_splitbar(HWND hWnd, int x)
91 {
92  RECT rt;
93  HGDIOBJ OldObj;
94  HDC hdc = GetDC(hWnd);
95 
96  if(!SizingPattern)
97  {
98  const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
99  SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
100  }
101  if(!SizingBrush)
102  {
104  }
105  GetClientRect(hWnd, &rt);
106  rt.left = x - SPLIT_WIDTH/2;
107  rt.right = x + SPLIT_WIDTH/2+1;
108  OldObj = SelectObject(hdc, SizingBrush);
109  PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
110  SelectObject(hdc, OldObj);
111  ReleaseDC(hWnd, hdc);
112 }
113 
114 /*******************************************************************************
115  * finish_splitbar [internal]
116  *
117  * make the splitbar invisible and resize the windows
118  * (helper for ChildWndProc)
119  */
120 static void finish_splitbar(HWND hWnd, int x)
121 {
122  RECT rt;
123 
124  draw_splitbar(hWnd, last_split);
125  last_split = -1;
126  GetClientRect(hWnd, &rt);
127  g_pChildWnd->nSplitPos = x;
128  ResizeWnd(rt.right, rt.bottom);
129  ReleaseCapture();
130 }
131 
132 /*******************************************************************************
133  *
134  * FUNCTION: ChildWnd_CmdWndProc(HWND, unsigned, WORD, LONG)
135  *
136  * PURPOSE: Processes WM_COMMAND messages for the main frame window.
137  *
138  */
139 
141 {
142  HTREEITEM hSelection;
143  HKEY hRootKey;
144  LPCWSTR keyPath, s;
145  WORD wID = LOWORD(wParam);
146 
147  UNREFERENCED_PARAMETER(message);
148 
149  switch (wID)
150  {
151  /* Parse the menu selections: */
152  case ID_REGISTRY_EXIT:
153  DestroyWindow(hWnd);
154  break;
155  case ID_VIEW_REFRESH:
156  /* TODO */
157  break;
159  TreeView_Expand(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd), TVE_EXPAND);
160  break;
163  break;
164  case ID_TREE_RENAME:
165  SetFocus(g_pChildWnd->hTreeWnd);
166  TreeView_EditLabel(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd));
167  break;
168  case ID_TREE_DELETE:
169  hSelection = TreeView_GetSelection(g_pChildWnd->hTreeWnd);
170  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, hSelection, &hRootKey);
171 
172  if (keyPath == 0 || *keyPath == 0)
173  {
175  }
176  else if (DeleteKey(hWnd, hRootKey, keyPath))
177  DeleteNode(g_pChildWnd->hTreeWnd, 0);
178  break;
179  case ID_TREE_EXPORT:
180  ExportRegistryFile(g_pChildWnd->hTreeWnd);
181  break;
182  case ID_EDIT_FIND:
183  FindDialog(hWnd);
184  break;
185  case ID_EDIT_COPYKEYNAME:
186  hSelection = TreeView_GetSelection(g_pChildWnd->hTreeWnd);
187  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, hSelection, &hRootKey);
188  CopyKeyName(hWnd, hRootKey, keyPath);
189  break;
190  case ID_EDIT_NEW_KEY:
191  CreateNewKey(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd));
192  break;
196  SendMessageW(hFrameWnd, WM_COMMAND, wParam, lParam);
197  break;
198  case ID_SWITCH_PANELS:
199  g_pChildWnd->nFocusPanel = !g_pChildWnd->nFocusPanel;
200  SetFocus(g_pChildWnd->nFocusPanel? g_pChildWnd->hListWnd: g_pChildWnd->hTreeWnd);
201  break;
202  default:
203  if ((wID >= ID_TREE_SUGGESTION_MIN) && (wID <= ID_TREE_SUGGESTION_MAX))
204  {
205  s = Suggestions;
206  while(wID > ID_TREE_SUGGESTION_MIN)
207  {
208  if (*s)
209  s += wcslen(s) + 1;
210  wID--;
211  }
212  SelectNode(g_pChildWnd->hTreeWnd, s);
213  break;
214  }
215  return FALSE;
216  }
217  return TRUE;
218 }
219 
220 /*******************************************************************************
221  *
222  * Key suggestion
223  */
224 
225 #define MIN(a,b) ((a < b) ? (a) : (b))
226 
227 static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions,
228  size_t iSuggestionsLength)
229 {
230  WCHAR szBuffer[256];
231  WCHAR szLastFound[256];
232  size_t i;
233  HKEY hOtherKey, hSubKey;
234  BOOL bFound;
235 
236  memset(pszSuggestions, 0, iSuggestionsLength * sizeof(*pszSuggestions));
237  iSuggestionsLength--;
238 
239  /* Are we a root key in HKEY_CLASSES_ROOT? */
240  if ((hRootKey == HKEY_CLASSES_ROOT) && pszKeyPath[0] && !wcschr(pszKeyPath, L'\\'))
241  {
242  do
243  {
244  bFound = FALSE;
245 
246  /* Check default key */
247  if (QueryStringValue(hRootKey, pszKeyPath, NULL,
248  szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
249  {
250  /* Sanity check this key; it cannot be empty, nor can it be a
251  * loop back */
252  if ((szBuffer[0] != L'\0') && _wcsicmp(szBuffer, pszKeyPath))
253  {
254  if (RegOpenKeyW(hRootKey, szBuffer, &hOtherKey) == ERROR_SUCCESS)
255  {
256  lstrcpynW(pszSuggestions, L"HKCR\\", (int) iSuggestionsLength);
257  i = wcslen(pszSuggestions);
258  pszSuggestions += i;
259  iSuggestionsLength -= i;
260 
261  lstrcpynW(pszSuggestions, szBuffer, (int) iSuggestionsLength);
262  i = MIN(wcslen(pszSuggestions) + 1, iSuggestionsLength);
263  pszSuggestions += i;
264  iSuggestionsLength -= i;
265  RegCloseKey(hOtherKey);
266 
267  bFound = TRUE;
268  wcscpy(szLastFound, szBuffer);
269  pszKeyPath = szLastFound;
270  }
271  }
272  }
273  }
274  while(bFound && (iSuggestionsLength > 0));
275 
276  /* Check CLSID key */
277  if (RegOpenKeyW(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
278  {
279  if (QueryStringValue(hSubKey, L"CLSID", NULL, szBuffer,
280  COUNT_OF(szBuffer)) == ERROR_SUCCESS)
281  {
282  lstrcpynW(pszSuggestions, L"HKCR\\CLSID\\", (int)iSuggestionsLength);
283  i = wcslen(pszSuggestions);
284  pszSuggestions += i;
285  iSuggestionsLength -= i;
286 
287  lstrcpynW(pszSuggestions, szBuffer, (int)iSuggestionsLength);
288  i = MIN(wcslen(pszSuggestions) + 1, iSuggestionsLength);
289  pszSuggestions += i;
290  iSuggestionsLength -= i;
291  }
292  RegCloseKey(hSubKey);
293  }
294  }
295 }
296 
297 
299 {
300  WNDPROC oldwndproc;
301  static WCHAR s_szNode[256];
302  oldwndproc = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA);
303 
304  switch (uMsg)
305  {
306  case WM_KEYUP:
307  if (wParam == VK_RETURN)
308  {
309  GetWindowTextW(hwnd, s_szNode, COUNT_OF(s_szNode));
310  SelectNode(g_pChildWnd->hTreeWnd, s_szNode);
311  }
312  break;
313  default:
314  break;
315  }
316  return CallWindowProcW(oldwndproc, hwnd, uMsg, wParam, lParam);
317 }
318 
319 static VOID
321 {
322  LPCWSTR keyPath, rootName;
323  LPWSTR fullPath;
324 
325  /* Wipe the listview, the status bar and the address bar if the root key was selected */
326  if (TreeView_GetParent(g_pChildWnd->hTreeWnd, hItem) == NULL)
327  {
328  ListView_DeleteAllItems(g_pChildWnd->hListWnd);
330  SendMessageW(g_pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)NULL);
331  return;
332  }
333 
334  if (pszPath == NULL)
335  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, hItem, &hRootKey);
336  else
337  keyPath = pszPath;
338 
339  if (keyPath)
340  {
341  RefreshListView(g_pChildWnd->hListWnd, hRootKey, keyPath);
342  rootName = get_root_key_name(hRootKey);
343  fullPath = HeapAlloc(GetProcessHeap(), 0, (wcslen(rootName) + 1 + wcslen(keyPath) + 1) * sizeof(WCHAR));
344  if (fullPath)
345  {
346  /* set (correct) the address bar text */
347  if (keyPath[0] != L'\0')
348  swprintf(fullPath, L"%s\\%s", rootName, keyPath);
349  else
350  fullPath = wcscpy(fullPath, rootName);
351  SendMessageW(hStatusBar, SB_SETTEXTW, 0, (LPARAM)fullPath);
352  SendMessageW(g_pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
353  HeapFree(GetProcessHeap(), 0, fullPath);
354  /* disable hive manipulation items temporarily (enable only if necessary) */
357  /* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
358  if (!(_wcsicmp(rootName, L"HKEY_LOCAL_MACHINE") &&
359  _wcsicmp(rootName, L"HKEY_USERS")))
360  {
361  /*
362  * enable the unload menu item if at the root, otherwise
363  * enable the load menu item if there is no slash in
364  * keyPath (ie. immediate child selected)
365  */
366  if(keyPath[0] == L'\0')
368  else if(!wcschr(keyPath, L'\\'))
370  }
371  }
372  }
373 }
374 
375 /*******************************************************************************
376  *
377  * FUNCTION: ChildWndProc(HWND, unsigned, WORD, LONG)
378  *
379  * PURPOSE: Processes messages for the child windows.
380  *
381  * WM_COMMAND - process the application menu
382  * WM_DESTROY - post a quit message and return
383  *
384  */
386 {
387  BOOL Result;
388 
389  switch (message)
390  {
391  case WM_CREATE:
392  {
393  WNDPROC oldproc;
394  HFONT hFont;
396 
397  /* Load "My Computer" string */
398  LoadStringW(hInst, IDS_MY_COMPUTER, buffer, COUNT_OF(buffer));
399 
400  g_pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd));
401  if (!g_pChildWnd) return 0;
402 
403  wcsncpy(g_pChildWnd->szPath, buffer, MAX_PATH);
404  g_pChildWnd->nSplitPos = 250;
405  g_pChildWnd->hWnd = hWnd;
408  hWnd, (HMENU)0, hInst, 0);
411  hWnd, (HMENU)0, hInst, 0);
412  g_pChildWnd->hTreeWnd = CreateTreeView(hWnd, g_pChildWnd->szPath, (HMENU) TREE_WINDOW);
413  g_pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, g_pChildWnd->szPath*/);
414  SetFocus(g_pChildWnd->hTreeWnd);
415 
416  /* set the address bar and button font */
417  if ((g_pChildWnd->hAddressBarWnd) && (g_pChildWnd->hAddressBtnWnd))
418  {
420  SendMessageW(g_pChildWnd->hAddressBarWnd,
421  WM_SETFONT,
422  (WPARAM)hFont,
423  0);
424  SendMessageW(g_pChildWnd->hAddressBtnWnd,
425  WM_SETFONT,
426  (WPARAM)hFont,
427  0);
428  }
429  /* Subclass the AddressBar */
430  oldproc = (WNDPROC)GetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_WNDPROC);
431  SetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_USERDATA, (DWORD_PTR)oldproc);
433  break;
434  }
435  case WM_COMMAND:
436  if(HIWORD(wParam) == BN_CLICKED)
437  {
438  PostMessageW(g_pChildWnd->hAddressBarWnd, WM_KEYUP, VK_RETURN, 0);
439  }
440 
441  if (!ChildWnd_CmdWndProc(hWnd, message, wParam, lParam))
442  {
443  goto def;
444  }
445  break;
446  case WM_SETCURSOR:
447  if (LOWORD(lParam) == HTCLIENT)
448  {
449  POINT pt;
450  GetCursorPos(&pt);
451  ScreenToClient(hWnd, &pt);
452  if (pt.x>=g_pChildWnd->nSplitPos-SPLIT_WIDTH/2 && pt.x<g_pChildWnd->nSplitPos+SPLIT_WIDTH/2+1)
453  {
455  return TRUE;
456  }
457  }
458  goto def;
459  case WM_DESTROY:
460  DestroyListView(g_pChildWnd->hListWnd);
461  DestroyTreeView(g_pChildWnd->hTreeWnd);
462  DestroyMainMenu();
463  HeapFree(GetProcessHeap(), 0, g_pChildWnd);
464  g_pChildWnd = NULL;
465  PostQuitMessage(0);
466  break;
467  case WM_LBUTTONDOWN:
468  {
469  RECT rt;
470  int x = (short)LOWORD(lParam);
471  GetClientRect(hWnd, &rt);
472  if (x>=g_pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<g_pChildWnd->nSplitPos+SPLIT_WIDTH/2+1)
473  {
474  last_split = g_pChildWnd->nSplitPos;
475  draw_splitbar(hWnd, last_split);
476  SetCapture(hWnd);
477  }
478  break;
479  }
480 
481  case WM_LBUTTONUP:
482  case WM_RBUTTONDOWN:
483  if (GetCapture() == hWnd)
484  {
485  finish_splitbar(hWnd, LOWORD(lParam));
486  }
487  break;
488 
489  case WM_CAPTURECHANGED:
490  if (GetCapture()==hWnd && last_split>=0)
491  draw_splitbar(hWnd, last_split);
492  break;
493 
494  case WM_KEYDOWN:
495  if (wParam == VK_ESCAPE)
496  if (GetCapture() == hWnd)
497  {
498  RECT rt;
499  draw_splitbar(hWnd, last_split);
500  GetClientRect(hWnd, &rt);
501  ResizeWnd(rt.right, rt.bottom);
502  last_split = -1;
503  ReleaseCapture();
505  }
506  break;
507 
508  case WM_MOUSEMOVE:
509  if (GetCapture() == hWnd)
510  {
511  HDC hdc;
512  RECT rt;
513  HGDIOBJ OldObj;
514  int x = LOWORD(lParam);
515  if(!SizingPattern)
516  {
517  const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
518  SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
519  }
520  if(!SizingBrush)
521  {
523  }
524 
525  GetClientRect(hWnd, &rt);
526  x = (SHORT) min(max(x, SPLIT_MIN), rt.right - SPLIT_MIN);
527  if(last_split != x)
528  {
529  rt.left = last_split-SPLIT_WIDTH/2;
530  rt.right = last_split+SPLIT_WIDTH/2+1;
531  hdc = GetDC(hWnd);
532  OldObj = SelectObject(hdc, SizingBrush);
533  PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
534  last_split = x;
535  rt.left = x-SPLIT_WIDTH/2;
536  rt.right = x+SPLIT_WIDTH/2+1;
537  PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
538  SelectObject(hdc, OldObj);
539  ReleaseDC(hWnd, hdc);
540  }
541  }
542  break;
543 
544  case WM_SETFOCUS:
545  if (g_pChildWnd != NULL)
546  {
547  SetFocus(g_pChildWnd->nFocusPanel? g_pChildWnd->hListWnd: g_pChildWnd->hTreeWnd);
548  }
549  break;
550 
551  case WM_TIMER:
552  break;
553 
554  case WM_NOTIFY:
555  if ((int)wParam == TREE_WINDOW && g_pChildWnd != NULL)
556  {
557  switch (((LPNMHDR)lParam)->code)
558  {
559  case TVN_ITEMEXPANDING:
560  return !OnTreeExpanding(g_pChildWnd->hTreeWnd, (NMTREEVIEW*)lParam);
561  case TVN_SELCHANGED:
562  {
563  NMTREEVIEW* pnmtv = (NMTREEVIEW*)lParam;
564  /* Get the parent of the current item */
565  HTREEITEM hParentItem = TreeView_GetParent(g_pChildWnd->hTreeWnd, pnmtv->itemNew.hItem);
566 
567  UpdateAddress(pnmtv->itemNew.hItem, NULL, NULL);
568 
569  /*
570  * Disable Delete/Rename menu options for 'My Computer' (first item so doesn't have any parent)
571  * and HKEY_* keys (their parent is 'My Computer' and the previous remark applies).
572  */
573  if (!hParentItem || !TreeView_GetParent(g_pChildWnd->hTreeWnd, hParentItem))
574  {
579  }
580  else
581  {
586  }
587 
588  break;
589  }
590  case NM_SETFOCUS:
591  g_pChildWnd->nFocusPanel = 0;
592  break;
593  case TVN_BEGINLABELEDIT:
594  {
595  LPNMTVDISPINFO ptvdi;
596  /* cancel label edit for rootkeys */
597  ptvdi = (LPNMTVDISPINFO) lParam;
598  if (!TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem) ||
599  !TreeView_GetParent(g_pChildWnd->hTreeWnd, TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem)))
600  return TRUE;
601  break;
602  }
603  case TVN_ENDLABELEDIT:
604  {
605  LPCWSTR keyPath;
606  HKEY hRootKey;
607  HKEY hKey = NULL;
608  LPNMTVDISPINFO ptvdi;
609  LONG lResult = TRUE;
610  WCHAR szBuffer[MAX_PATH];
611 
612  ptvdi = (LPNMTVDISPINFO) lParam;
613  if (ptvdi->item.pszText)
614  {
615  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem), &hRootKey);
616  _snwprintf(szBuffer, COUNT_OF(szBuffer), L"%s\\%s", keyPath, ptvdi->item.pszText);
617  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, ptvdi->item.hItem, &hRootKey);
618  if (RegOpenKeyExW(hRootKey, szBuffer, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
619  {
620  lResult = FALSE;
621  RegCloseKey(hKey);
622  TreeView_EditLabel(g_pChildWnd->hTreeWnd, ptvdi->item.hItem);
623  }
624  else
625  {
626  if (RenameKey(hRootKey, keyPath, ptvdi->item.pszText) != ERROR_SUCCESS)
627  lResult = FALSE;
628  else
629  UpdateAddress(ptvdi->item.hItem, hRootKey, szBuffer);
630  }
631  return lResult;
632  }
633  }
634  default:
635  return 0;
636  }
637  }
638  else
639  {
640  if ((int)wParam == LIST_WINDOW && g_pChildWnd != NULL)
641  {
642  switch (((LPNMHDR)lParam)->code)
643  {
644  case NM_SETFOCUS:
645  g_pChildWnd->nFocusPanel = 1;
646  break;
647  default:
648  if(!ListWndNotifyProc(g_pChildWnd->hListWnd, wParam, lParam, &Result))
649  {
650  goto def;
651  }
652  return Result;
653  break;
654  }
655  }
656  }
657  break;
658 
659  case WM_CONTEXTMENU:
660  {
661  POINT pt;
662  if((HWND)wParam == g_pChildWnd->hListWnd)
663  {
664  int i, cnt;
665  BOOL IsDefault;
666  pt.x = (short) LOWORD(lParam);
667  pt.y = (short) HIWORD(lParam);
668  cnt = ListView_GetSelectedCount(g_pChildWnd->hListWnd);
669  i = ListView_GetNextItem(g_pChildWnd->hListWnd, -1, LVNI_FOCUSED | LVNI_SELECTED);
670  if (pt.x == -1 && pt.y == -1)
671  {
672  RECT rc;
673  if (i != -1)
674  {
675  rc.left = LVIR_BOUNDS;
676  SendMessageW(g_pChildWnd->hListWnd, LVM_GETITEMRECT, i, (LPARAM) &rc);
677  pt.x = rc.left + 8;
678  pt.y = rc.top + 8;
679  }
680  else
681  pt.x = pt.y = 0;
682  ClientToScreen(g_pChildWnd->hListWnd, &pt);
683  }
684  if(i == -1)
685  {
687  }
688  else
689  {
692  IsDefault = IsDefaultValue(g_pChildWnd->hListWnd, i);
693  if(cnt == 1)
695  else
697  EnableMenuItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
698  EnableMenuItem(mnu, ID_EDIT_MODIFY_BIN, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
699 
700  TrackPopupMenu(mnu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
701  }
702  }
703  else if ((HWND)wParam == g_pChildWnd->hTreeWnd)
704  {
705  TVHITTESTINFO hti;
706  HMENU hContextMenu;
707  TVITEMW item;
708  MENUITEMINFOW mii;
709  WCHAR resource[256];
710  WCHAR buffer[256];
711  LPWSTR s;
712  LPCWSTR keyPath;
713  HKEY hRootKey;
714  int iLastPos;
715  WORD wID;
716 
717  pt.x = (short) LOWORD(lParam);
718  pt.y = (short) HIWORD(lParam);
719 
720  if (pt.x == -1 && pt.y == -1)
721  {
722  RECT rc;
723  hti.hItem = TreeView_GetSelection(g_pChildWnd->hTreeWnd);
724  if (hti.hItem != NULL)
725  {
726  TreeView_GetItemRect(g_pChildWnd->hTreeWnd, hti.hItem, &rc, TRUE);
727  pt.x = rc.left + 8;
728  pt.y = rc.top + 8;
729  ClientToScreen(g_pChildWnd->hTreeWnd, &pt);
730  hti.flags = TVHT_ONITEM;
731  }
732  else
733  hti.flags = 0;
734  }
735  else
736  {
737  hti.pt.x = pt.x;
738  hti.pt.y = pt.y;
739  ScreenToClient(g_pChildWnd->hTreeWnd, &hti.pt);
740  TreeView_HitTest(g_pChildWnd->hTreeWnd, &hti);
741  }
742 
743  if (hti.flags & TVHT_ONITEM)
744  {
745  hContextMenu = GetSubMenu(hPopupMenus, PM_TREECONTEXT);
746  TreeView_SelectItem(g_pChildWnd->hTreeWnd, hti.hItem);
747 
748  memset(&item, 0, sizeof(item));
749  item.mask = TVIF_STATE | TVIF_CHILDREN;
750  item.hItem = hti.hItem;
751  TreeView_GetItem(g_pChildWnd->hTreeWnd, &item);
752 
753  /* Set the Expand/Collapse menu item appropriately */
754  LoadStringW(hInst, (item.state & TVIS_EXPANDED) ? IDS_COLLAPSE : IDS_EXPAND, buffer, COUNT_OF(buffer));
755  memset(&mii, 0, sizeof(mii));
756  mii.cbSize = sizeof(mii);
758  mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
760  mii.dwTypeData = (LPWSTR) buffer;
761  SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
762 
763  /* Remove any existing suggestions */
764  memset(&mii, 0, sizeof(mii));
765  mii.cbSize = sizeof(mii);
766  mii.fMask = MIIM_ID;
767  GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
768  if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
769  {
770  do
771  {
772  iLastPos = GetMenuItemCount(hContextMenu) - 1;
773  GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
774  RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
775  }
776  while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
777  }
778 
779  /* Come up with suggestions */
780  keyPath = GetItemPath(g_pChildWnd->hTreeWnd, NULL, &hRootKey);
781  SuggestKeys(hRootKey, keyPath, Suggestions, COUNT_OF(Suggestions));
782  if (Suggestions[0])
783  {
784  AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
785 
786  LoadStringW(hInst, IDS_GOTO_SUGGESTED_KEY, resource, COUNT_OF(resource));
787 
788  s = Suggestions;
790  while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
791  {
792  _snwprintf(buffer, COUNT_OF(buffer), resource, s);
793 
794  memset(&mii, 0, sizeof(mii));
795  mii.cbSize = sizeof(mii);
796  mii.fMask = MIIM_STRING | MIIM_ID;
797  mii.wID = wID++;
798  mii.dwTypeData = buffer;
799  InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
800 
801  s += wcslen(s) + 1;
802  }
803  }
804  TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, g_pChildWnd->hWnd, NULL);
805  }
806  }
807  break;
808  }
809 
810  case WM_SIZE:
811  if (wParam != SIZE_MINIMIZED && g_pChildWnd != NULL)
812  {
813  ResizeWnd(LOWORD(lParam), HIWORD(lParam));
814  }
815  /* fall through */
816  default:
817 def:
818  return DefWindowProcW(hWnd, message, wParam, lParam);
819  }
820  return 0;
821 }
#define HKEY_USERS
Definition: winreg.h:13
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define IDC_SIZEWE
Definition: winuser.h:689
#define MB_ICONHAND
Definition: winuser.h:782
#define IDS_GOTO_SUGGESTED_KEY
Definition: resource.h:193
#define ID_TREE_RENAME
Definition: resource.h:154
#define ID_SWITCH_PANELS
Definition: resource.h:151
#define HDC
Definition: msvc.h:22
LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:385
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2404
#define max(a, b)
Definition: svc.c:63
Definition: tftpd.h:59
HDWP WINAPI BeginDeferWindowPos(_In_ int)
#define MF_DISABLED
Definition: winuser.h:130
#define TRUE
Definition: types.h:120
void DestroyListView(HWND hwndLV)
Definition: listview.c:653
#define ID_TREE_COLLAPSEBRANCH
Definition: resource.h:97
ChildWnd * g_pChildWnd
Definition: childwnd.c:23
#define TreeView_GetItemRect(hwnd, hitem, prc, code)
Definition: commctrl.h:3396
#define PATINVERT
Definition: wingdi.h:326
#define MF_BYCOMMAND
Definition: winuser.h:202
static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions, size_t iSuggestionsLength)
Definition: childwnd.c:227
#define HBITMAP
Definition: msvc.h:28
long y
Definition: polytest.cpp:48
#define ID_REGISTRY_LOADHIVE
Definition: resource.h:106
#define ERROR_SUCCESS
Definition: deptool.c:10
#define WM_CONTEXTMENU
Definition: richedit.h:64
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define WM_LBUTTONDOWN
Definition: winuser.h:1752
LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:298
BOOL ExportRegistryFile(HWND hWnd)
Definition: framewnd.c:586
#define ID_EDIT_COPYKEYNAME
Definition: resource.h:61
long x
Definition: polytest.cpp:48
static void finish_splitbar(HWND hWnd, int x)
Definition: childwnd.c:120
HDC WINAPI GetDC(_In_opt_ HWND)
#define PM_MODIFYVALUE
Definition: main.h:35
#define ID_TREE_EXPORT
Definition: resource.h:160
#define KEY_READ
Definition: nt_native.h:1023
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
#define pt(x, y)
Definition: drawing.c:79
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define TreeView_EditLabel(hwnd, hitem)
Definition: commctrl.h:3471
#define HKEY_CURRENT_USER
Definition: winreg.h:11
HWND hTreeWnd
Definition: main.h:60
#define ID_EDIT_FIND
Definition: resource.h:62
#define BS_TEXT
Definition: winuser.h:276
#define WM_CAPTURECHANGED
Definition: winuser.h:1784
HWND hListWnd
Definition: main.h:61
#define CALLBACK
Definition: compat.h:27
#define BS_DEFPUSHBUTTON
Definition: pedump.c:652
HWND hWnd
Definition: settings.c:17
LONG top
Definition: windef.h:297
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
GLuint buffer
Definition: glext.h:5915
HWND WINAPI SetFocus(_In_opt_ HWND)
static BOOL ChildWnd_CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: childwnd.c:140
LPWSTR dwTypeData
Definition: winuser.h:3211
#define LVNI_SELECTED
Definition: commctrl.h:2394
#define HKEY_DYN_DATA
Definition: winreg.h:16
#define WS_CHILD
Definition: pedump.c:617
LONG left
Definition: windef.h:296
#define SWP_NOZORDER
Definition: winuser.h:1232
UINT uFlags
Definition: api.c:60
UINT mask
Definition: commctrl.h:3283
#define MFS_DEFAULT
Definition: winuser.h:743
#define VK_ESCAPE
Definition: winuser.h:2168
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2635
#define BS_CENTER
Definition: winuser.h:260
#define HKEY_CURRENT_CONFIG
Definition: winreg.h:15
LONG right
Definition: windef.h:298
BOOL WINAPI DestroyWindow(_In_ HWND)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define VK_RETURN
Definition: winuser.h:2155
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
#define SPLIT_WIDTH
Definition: eventvwr.c:62
HFONT hFont
Definition: main.c:53
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define lstrcpynW
Definition: compat.h:397
LONG RenameKey(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpNewName)
Definition: edit.c:1489
HBITMAP SizingPattern
Definition: childwnd.c:25
UINT_PTR WPARAM
Definition: windef.h:207
#define ID_EDIT_NEW_BINARYVALUE
Definition: resource.h:67
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:91
int nSplitPos
Definition: main.h:65
#define TPM_RIGHTBUTTON
Definition: winuser.h:2334
GLenum GLclampf GLint i
Definition: glfuncs.h:14
#define ID_REGISTRY_EXIT
Definition: resource.h:53
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define ListView_GetSelectedCount(hwndLV)
Definition: commctrl.h:2679
#define TVN_ENDLABELEDIT
Definition: commctrl.h:3711
#define TVIF_CHILDREN
Definition: commctrl.h:3239
#define ID_TREE_SUGGESTION_MIN
Definition: resource.h:158
#define MIIM_STATE
Definition: winuser.h:716
long LONG
Definition: pedump.c:60
#define NMTREEVIEW
Definition: commctrl.h:3609
#define ID_EDIT_DELETE
Definition: resource.h:59
LONG_PTR LPARAM
Definition: windef.h:208
#define WM_SETCURSOR
Definition: winuser.h:1618
short SHORT
Definition: pedump.c:59
#define MF_BYPOSITION
Definition: winuser.h:203
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3311
BOOL IsDefaultValue(HWND hwndLV, int i)
Definition: listview.c:107
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
#define TVN_BEGINLABELEDIT
Definition: commctrl.h:3710
HWND WINAPI GetCapture(void)
Definition: message.c:2855
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define TREE_WINDOW
Definition: main.h:27
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define CW_USEDEFAULT
Definition: winuser.h:225
BOOL CopyKeyName(HWND hWnd, HKEY hRootKey, LPCWSTR keyName)
Definition: framewnd.c:790
#define GWLP_USERDATA
Definition: treelist.c:63
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:570
HDC hdc
Definition: msvc.h:53
static void draw_splitbar(HWND hWnd, int x)
Definition: childwnd.c:90
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
smooth NULL
Definition: ftsmooth.c:416
#define TVE_COLLAPSE
Definition: commctrl.h:3389
_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:426
#define WM_KEYDOWN
Definition: winuser.h:1691
#define MF_SEPARATOR
Definition: winuser.h:137
static WCHAR Suggestions[256]
Definition: childwnd.c:27
#define SM_CYEDGE
Definition: winuser.h:999
#define SPLIT_MIN
Definition: main.h:31
#define LVNI_FOCUSED
Definition: commctrl.h:2393
#define ID_EDIT_RENAME
Definition: resource.h:60
BOOL DeleteNode(HWND hwndTV, HTREEITEM hItem)
Definition: treeview.c:102
LPCWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY *phRootKey)
Definition: treeview.c:83
#define WS_CHILDWINDOW
Definition: pedump.c:639
int cChildren
Definition: commctrl.h:3291
#define WM_SETTEXT
Definition: winuser.h:1599
#define WM_DESTROY
Definition: winuser.h:1591
HTREEITEM hItem
Definition: commctrl.h:3488
#define MIIM_ID
Definition: winuser.h:717
#define WM_RBUTTONDOWN
Definition: winuser.h:1755
#define GetMenuItemInfo
Definition: winuser.h:5654
HBRUSH WINAPI CreatePatternBrush(_In_ HBITMAP)
#define SetMenuItemInfo
Definition: winuser.h:5716
BOOL ListWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
Definition: listview.c:543
#define ID_VIEW_REFRESH
Definition: resource.h:58
WCHAR szPath[MAX_PATH]
Definition: main.h:67
#define ID_TREE_SUGGESTION_MAX
Definition: resource.h:159
#define MIN(a, b)
Definition: childwnd.c:225
#define COUNT_OF(a)
Definition: main.h:33
static VOID DestroyTreeView(HWND hTreeView)
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3440
unsigned int BOOL
Definition: ntddk_ex.h:94
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define AppendMenu
Definition: winuser.h:5597
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
#define TreeView_HitTest(hwnd, lpht)
Definition: commctrl.h:3480
#define WM_SIZE
Definition: winuser.h:1593
static int last_split
Definition: childwnd.c:24
HMENU hPopupMenus
Definition: main.c:33
#define NM_SETFOCUS
Definition: commctrl.h:135
#define SWP_NOACTIVATE
Definition: winuser.h:1227
#define ID_REGISTRY_UNLOADHIVE
Definition: resource.h:107
void DestroyMainMenu()
Definition: main.c:156
HWND hWnd
Definition: main.h:59
#define TVN_SELCHANGED
Definition: commctrl.h:3702
#define WM_TIMER
Definition: winuser.h:1718
#define MF_ENABLED
Definition: winuser.h:128
#define MAX_PATH
Definition: compat.h:26
#define swprintf(buf, format,...)
Definition: sprintf.c:56
#define PM_TREECONTEXT
Definition: main.h:37
#define WM_KEYUP
Definition: winuser.h:1692
unsigned int UINT
Definition: ndis.h:50
unsigned short WORD
Definition: ntddk_ex.h:93
int WINAPI GetSystemMetrics(_In_ int)
#define BN_CLICKED
Definition: winuser.h:1886
unsigned long DWORD
Definition: ntddk_ex.h:95
#define IDS_MY_COMPUTER
Definition: resource.h:131
HWND hStatusBar
Definition: main.cpp:35
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
#define SIZE_MINIMIZED
Definition: winuser.h:2460
#define SB_SETTEXTW
Definition: commctrl.h:1912
HWND CreateTreeView(HWND hwndParent, LPWSTR pHostName, HMENU id)
Definition: treeview.c:634
HWND hAddressBtnWnd
Definition: main.h:63
#define TVE_EXPAND
Definition: commctrl.h:3390
#define DEFAULT_GUI_FONT
Definition: wingdi.h:907
void ResizeWnd(int cx, int cy)
Definition: childwnd.c:41
static VOID UpdateAddress(HTREEITEM hItem, HKEY hRootKey, LPCWSTR pszPath)
Definition: childwnd.c:320
#define ID_EDIT_NEW_KEY
Definition: resource.h:65
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1087
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 MFS_GRAYED
Definition: winuser.h:746
BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCWSTR keyPath)
Definition: listview.c:670
GLdouble s
Definition: gl.h:2039
#define TreeView_GetParent(hwnd, hitem)
Definition: commctrl.h:3436
void FindDialog(HWND hWnd)
Definition: find.c:813
#define WS_TABSTOP
Definition: pedump.c:634
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define WM_COMMAND
Definition: winuser.h:1716
LPCWSTR get_root_key_name(HKEY hRootKey)
Definition: childwnd.c:29
uint32_t DWORD_PTR
Definition: typedefs.h:63
#define BS_VCENTER
Definition: winuser.h:279
#define LVM_GETITEMRECT
Definition: commctrl.h:2447
#define GWLP_WNDPROC
Definition: treelist.c:66
#define ID_EDIT_NEW_DWORDVALUE
Definition: resource.h:68
#define TVIS_EXPANDED
Definition: commctrl.h:3251
#define BS_FLAT
Definition: winuser.h:280
BOOL WINAPI MessageBeep(_In_ UINT)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
#define ID_EDIT_MODIFY
Definition: resource.h:64
#define MIIM_STRING
Definition: winuser.h:722
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HWND hFrameWnd
Definition: main.c:30
#define TVN_ITEMEXPANDING
Definition: commctrl.h:3705
#define ID_EDIT_NEW_STRINGVALUE
Definition: resource.h:66
LONG QueryStringValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPTSTR pszBuffer, DWORD dwBufferLen)
Definition: settings.c:19
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
HWND WINAPI SetCapture(_In_ HWND hWnd)
#define LVIR_BOUNDS
Definition: commctrl.h:2442
HINSTANCE hInst
Definition: dxdiag.c:13
HMENU hMenuFrame
Definition: main.c:32
static ATOM item
Definition: dde.c:856
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1378
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
INT x
Definition: msvc.h:62
#define TreeView_SelectItem(hwnd, hitem)
Definition: commctrl.h:3448
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_LBUTTONUP
Definition: winuser.h:1753
BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath)
Definition: edit.c:1456
#define PM_NEW
Definition: main.h:36
#define ID_TREE_EXPANDBRANCH
Definition: resource.h:95
#define min(a, b)
Definition: monoChain.cc:55
#define WM_MOUSEMOVE
Definition: winuser.h:1751
HTREEITEM hItem
Definition: commctrl.h:3284
BOOL CreateListView(PMAIN_WND_INFO Info)
Definition: listview.c:355
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_SETFONT
Definition: winuser.h:1632
#define LPNMTVDISPINFO
Definition: commctrl.h:3643
BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
Definition: treeview.c:571
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define IDC_ARROW
Definition: winuser.h:682
_Out_opt_ int * cx
Definition: commctrl.h:570
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2864
HWND hAddressBarWnd
Definition: main.h:62
Definition: main.h:57
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1590
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LIST_WINDOW
Definition: main.h:28
BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
Definition: treeview.c:665
#define HIWORD(l)
Definition: typedefs.h:246
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3381
LONG bottom
Definition: windef.h:299
#define TVIF_STATE
Definition: commctrl.h:3236
UINT state
Definition: commctrl.h:3285
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define GetWindowLongPtr
Definition: treelist.c:73
#define ID_TREE_DELETE
Definition: resource.h:153
#define WM_SETFOCUS
Definition: winuser.h:1595
#define MF_GRAYED
Definition: winuser.h:129
#define HTCLIENT
Definition: winuser.h:2429
WCHAR * LPWSTR
Definition: xmlstorage.h:184
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
LONG_PTR LRESULT
Definition: windef.h:209
#define IDS_COLLAPSE
Definition: resource.h:190
#define IDS_EXPAND
Definition: resource.h:189
#define TVHT_ONITEM
Definition: commctrl.h:3494
#define TreeView_Expand(hwnd, hitem, code)
Definition: commctrl.h:3387
#define WS_VISIBLE
Definition: pedump.c:620
#define ID_EDIT_MODIFY_BIN
Definition: resource.h:124
#define memset(x, y, z)
Definition: compat.h:39
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
BOOL OnTreeExpanding(HWND hWnd, NMTREEVIEW *pnmtv)
Definition: treeview.c:503
#define LOWORD(l)
Definition: pedump.c:82
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:394
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3457
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define WM_NOTIFY
Definition: richedit.h:61
#define InsertMenuItem
Definition: winuser.h:5670
#define ListView_DeleteAllItems(hwnd)
Definition: commctrl.h:2384
int nFocusPanel
Definition: main.h:64
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
HBRUSH SizingBrush
Definition: childwnd.c:26