Author: cwittich Date: Mon Jun 18 04:09:37 2007 New Revision: 27222
URL: http://svn.reactos.org/svn/reactos?rev=27222&view=rev Log: added explorer-like addressbar
Modified: trunk/reactos/base/applications/regedit/childwnd.c trunk/reactos/base/applications/regedit/main.h
Modified: trunk/reactos/base/applications/regedit/childwnd.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/regedit/c... ============================================================================== --- trunk/reactos/base/applications/regedit/childwnd.c (original) +++ trunk/reactos/base/applications/regedit/childwnd.c Mon Jun 18 04:09:37 2007 @@ -71,8 +71,9 @@ SetRect(&rt, 0, 0, cx, cy);
cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2; - DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE); - DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx , rt.top, rt.right-cx, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE); + DeferWindowPos(hdwp, pChildWnd->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left, 23, SWP_NOZORDER|SWP_NOACTIVATE); + DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top + 25, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top - 30, SWP_NOZORDER|SWP_NOACTIVATE); + DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx , rt.top + 25, rt.right-cx, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE); EndDeferWindowPos(hdwp); }
@@ -253,6 +254,28 @@ } }
+ +LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + WNDPROC oldwndproc; + static TCHAR s_szNode[256]; + oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWL_USERDATA); + + switch (uMsg) + { + case WM_KEYUP: + if (wParam == VK_RETURN) + { + GetWindowText(hwnd, s_szNode, sizeof(s_szNode) / sizeof(s_szNode[0])); + SelectNode(g_pChildWnd->hTreeWnd, s_szNode); + } + break; + default: + break; + } + return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam); +} + /******************************************************************************* * * FUNCTION: ChildWndProc(HWND, unsigned, WORD, LONG) @@ -273,6 +296,7 @@ switch (message) { case WM_CREATE: { + WNDPROC oldproc; TCHAR buffer[MAX_PATH]; /* load "My Computer" string */ LoadString(hInst, IDS_MY_COMPUTER, buffer, sizeof(buffer)/sizeof(TCHAR)); @@ -283,10 +307,18 @@ _tcsncpy(pChildWnd->szPath, buffer, MAX_PATH); pChildWnd->nSplitPos = 250; pChildWnd->hWnd = hWnd; - pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW); + pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + hWnd, (HMENU)0, hInst, 0); + pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW); pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/); SetFocus(pChildWnd->hTreeWnd); - break; + + /* Subclass the AddressBar */ + oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC); + SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc); + SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC, (DWORD_PTR)AddressBarProc); + break; } case WM_COMMAND: if (!_CmdWndProc(hWnd, message, wParam, lParam)) { @@ -424,6 +456,7 @@ if (fullPath) { _stprintf(fullPath, _T("%s\%s"), rootName, keyPath); SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath); + SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath); HeapFree(GetProcessHeap(), 0, fullPath);
{
Modified: trunk/reactos/base/applications/regedit/main.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/regedit/m... ============================================================================== --- trunk/reactos/base/applications/regedit/main.h (original) +++ trunk/reactos/base/applications/regedit/main.h Mon Jun 18 04:09:37 2007 @@ -57,6 +57,7 @@ HWND hWnd; HWND hTreeWnd; HWND hListWnd; + HWND hAddressBarWnd; int nFocusPanel; /* 0: left 1: right */ int nSplitPos; WINDOWPLACEMENT pos;