Implementation of the Explorer desktop window. More...
#include <desktop.h>
Public Types | |
typedef Window | super |
Public Member Functions | |
DesktopWindow (HWND hwnd) | |
~DesktopWindow () | |
virtual HRESULT STDMETHODCALLTYPE | GetWindow (HWND *lphwnd) |
virtual HRESULT STDMETHODCALLTYPE | QueryActiveShellView (IShellView **ppshv) |
virtual HRESULT STDMETHODCALLTYPE | GetControlWindow (UINT id, HWND *lphwnd) |
virtual HRESULT STDMETHODCALLTYPE | SendControlMsg (UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) |
Static Public Member Functions | |
static HWND | Create () |
Protected Member Functions | |
LRESULT | Init (LPCREATESTRUCT pcs) |
LRESULT | WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam) |
virtual HRESULT | OnDefaultCommand (LPIDA pida) |
Protected Attributes | |
IShellView * | _pShellView |
WindowHandle | _desktopBar |
Implementation of the Explorer desktop window.
Definition at line 51 of file desktop.h.
typedef Window DesktopWindow::super |
DesktopWindow::DesktopWindow | ( | HWND | hwnd ) |
Definition at line 311 of file desktop.cpp.
References _pShellView.
: super(hwnd) { _pShellView = NULL; }
DesktopWindow::~DesktopWindow | ( | ) |
Definition at line 317 of file desktop.cpp.
References _pShellView.
{ if (_pShellView) _pShellView->Release(); }
HWND DesktopWindow::Create | ( | ) | [static] |
Definition at line 324 of file desktop.cpp.
References _desktopBar, GET_WINDOW, HWND, IDI_REACTOS, TEXT, and WINDOW_CREATOR.
Referenced by _tWinMain(), and Init().
{ static IconWindowClass wcDesktop(TEXT("Progman"), IDI_REACTOS, CS_DBLCLKS); /* (disabled because of small ugly temporary artefacts when hiding start menu) wcDesktop.hbrBackground = (HBRUSH)(COLOR_BACKGROUND+1); */ int width = GetSystemMetrics(SM_CXSCREEN); int height = GetSystemMetrics(SM_CYSCREEN); HWND hwndDesktop = Window::Create(WINDOW_CREATOR(DesktopWindow), WS_EX_TOOLWINDOW, wcDesktop, TEXT("Program Manager"), WS_POPUP|WS_VISIBLE, //|WS_CLIPCHILDREN for SDI frames 0, 0, width, height, 0); // work around to display desktop bar in Wine ShowWindow(GET_WINDOW(DesktopWindow, hwndDesktop)->_desktopBar, SW_SHOW); // work around for Windows NT, Win 98, ... // Without this the desktop has mysteriously only a size of 800x600 pixels. MoveWindow(hwndDesktop, 0, 0, width, height, TRUE); return hwndDesktop; }
virtual HRESULT STDMETHODCALLTYPE DesktopWindow::GetControlWindow | ( | UINT | id, |
HWND * | lphwnd | ||
) | [inline, virtual] |
virtual HRESULT STDMETHODCALLTYPE DesktopWindow::GetWindow | ( | HWND * | lphwnd ) | [inline, virtual] |
Definition at line 60 of file desktop.h.
References WindowHandle::_hwnd.
{ *lphwnd = _hwnd; return S_OK; }
LRESULT DesktopWindow::Init | ( | LPCREATESTRUCT | pcs ) | [protected, virtual] |
Reimplemented from Window.
Definition at line 348 of file desktop.cpp.
References _desktopBar, WindowHandle::_hwnd, ExplorerGlobals::_hwndDesktopBar, ExplorerGlobals::_hwndShellView, _pShellView, Create(), g_Globals, GetDesktopFolder(), HWND, and Window::Init().
{ if (super::Init(pcs)) return 1; HRESULT hr = GetDesktopFolder()->CreateViewObject(_hwnd, IID_IShellView, (void**)&_pShellView); /* also possible: SFV_CREATE sfv_create; sfv_create.cbSize = sizeof(SFV_CREATE); sfv_create.pshf = GetDesktopFolder(); sfv_create.psvOuter = NULL; sfv_create.psfvcb = NULL; HRESULT hr = SHCreateShellFolderView(&sfv_create, &_pShellView); */ HWND hWndView = 0; if (SUCCEEDED(hr)) { FOLDERSETTINGS fs; fs.ViewMode = FVM_ICON; fs.fFlags = FWF_DESKTOP|FWF_NOCLIENTEDGE|FWF_NOSCROLL|FWF_BESTFITWINDOW|FWF_SNAPTOGRID; //|FWF_AUTOARRANGE; ClientRect rect(_hwnd); hr = _pShellView->CreateViewWindow(NULL, &fs, this, &rect, &hWndView); ///@todo use IShellBrowser::GetViewStateStream() to restore previous view state -> see SHOpenRegStream() if (SUCCEEDED(hr)) { g_Globals._hwndShellView = hWndView; // subclass shellview window new DesktopShellView(hWndView, _pShellView); _pShellView->UIActivate(SVUIA_ACTIVATE_FOCUS); /* IShellView2* pShellView2; hr = _pShellView->QueryInterface(IID_IShellView2, (void**)&pShellView2); SV2CVW2_PARAMS params; params.cbSize = sizeof(SV2CVW2_PARAMS); params.psvPrev = _pShellView; params.pfs = &fs; params.psbOwner = this; params.prcView = ▭ params.pvid = params.pvid;//@@ hr = pShellView2->CreateViewWindow2(¶ms); params.pvid; */ /* IFolderView* pFolderView; hr = _pShellView->QueryInterface(IID_IFolderView, (void**)&pFolderView); if (SUCCEEDED(hr)) { hr = pFolderView->GetAutoArrange(); hr = pFolderView->SetCurrentViewMode(FVM_DETAILS); } */ } } if (hWndView && SetShellWindowEx) SetShellWindowEx(_hwnd, hWndView); else if (SetShellWindow) SetShellWindow(_hwnd); // create the explorer bar _desktopBar = DesktopBar::Create(); g_Globals._hwndDesktopBar = _desktopBar; return 0; }
HRESULT DesktopWindow::OnDefaultCommand | ( | LPIDA | pida ) | [protected, virtual] |
Reimplemented from IShellBrowserImpl.
Definition at line 476 of file desktop.cpp.
References MainFrameBase::OpenShellFolders().
{ #ifndef ROSSHELL // in shell-only-mode fall through and let shell32 handle the command if (MainFrameBase::OpenShellFolders(pida, 0)) return S_OK; #endif return E_NOTIMPL; }
virtual HRESULT STDMETHODCALLTYPE DesktopWindow::QueryActiveShellView | ( | IShellView ** | ppshv ) | [inline, virtual] |
Definition at line 66 of file desktop.h.
References _pShellView.
{ _pShellView->AddRef(); *ppshv = _pShellView; return S_OK; }
virtual HRESULT STDMETHODCALLTYPE DesktopWindow::SendControlMsg | ( | UINT | id, |
UINT | uMsg, | ||
WPARAM | wParam, | ||
LPARAM | lParam, | ||
LRESULT * | pret | ||
) | [inline, virtual] |
LRESULT DesktopWindow::WndProc | ( | UINT | nmsg, |
WPARAM | wparam, | ||
LPARAM | lparam | ||
) | [protected, virtual] |
Reimplemented from Window.
Definition at line 429 of file desktop.cpp.
References _desktopBar, WindowHandle::_hwnd, ExplorerGlobals::_hwndShellView, explorer_show_frame(), g_Globals, ShowExitWindowsDialog(), WM_GETISHELLBROWSER, and Window::WndProc().
{ switch(nmsg) { case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_MBUTTONDBLCLK: explorer_show_frame(SW_SHOWNORMAL); break; case WM_GETISHELLBROWSER: return (LRESULT)static_cast<IShellBrowser*>(this); case WM_DESTROY: ///@todo use IShellBrowser::GetViewStateStream() and _pShellView->SaveViewState() to store view state if (SetShellWindow) SetShellWindow(0); break; case WM_CLOSE: ShowExitWindowsDialog(_hwnd); break; case WM_SYSCOMMAND: if (wparam == SC_TASKLIST) { if (_desktopBar) SendMessage(_desktopBar, nmsg, wparam, lparam); } goto def; case WM_SYSCOLORCHANGE: // redraw background window InvalidateRect(g_Globals._hwndShellView, NULL, TRUE); // forward message to shell view window to redraw icon backgrounds SendMessage(g_Globals._hwndShellView, WM_SYSCOLORCHANGE, wparam, lparam); break; default: def: return super::WndProc(nmsg, wparam, lparam); } return 0; }
WindowHandle DesktopWindow::_desktopBar [protected] |
IShellView* DesktopWindow::_pShellView [protected] |
Definition at line 87 of file desktop.h.
Referenced by DesktopWindow(), Init(), QueryActiveShellView(), and ~DesktopWindow().
ROS Explorer Source Code Documentation
generated on 02.01.2013 by ![]() |