mirror of
https://github.com/reactos/reactos.git
synced 2025-06-20 01:35:22 +00:00
[SHELL32]
* Fix gcc compilation. [BROWSEUI/RSHELL] * Use virtual destructors and cleanup with delete in the creator functions. * Try to fix a bit the "close" flow, so that less circular references remain when the filebrowser windows are closed. svn path=/branches/shell-experiments/; revision=63539
This commit is contained in:
parent
580b89e9b6
commit
72aa759dd4
16 changed files with 328 additions and 266 deletions
|
@ -52,7 +52,7 @@ HRESULT WINAPI CMenuBand_Constructor(REFIID riid, LPVOID *ppv)
|
||||||
hr = site->QueryInterface(riid, ppv);
|
hr = site->QueryInterface(riid, ppv);
|
||||||
|
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
site->Release();
|
delete site;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -255,8 +255,7 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetSite(REFIID riid, PVOID *ppvSite)
|
||||||
return m_site->QueryInterface(riid, ppvSite);
|
return m_site->QueryInterface(riid, ppvSite);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetWindow(
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetWindow(HWND *phwnd)
|
||||||
HWND *phwnd)
|
|
||||||
{
|
{
|
||||||
if (m_SFToolbar != NULL)
|
if (m_SFToolbar != NULL)
|
||||||
return m_SFToolbar->GetWindow(phwnd);
|
return m_SFToolbar->GetWindow(phwnd);
|
||||||
|
@ -264,6 +263,8 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetWindow(
|
||||||
if (m_staticToolbar != NULL)
|
if (m_staticToolbar != NULL)
|
||||||
return m_staticToolbar->GetWindow(phwnd);
|
return m_staticToolbar->GetWindow(phwnd);
|
||||||
|
|
||||||
|
if (phwnd) *phwnd = NULL;
|
||||||
|
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,10 +418,25 @@ HRESULT STDMETHODCALLTYPE CMenuBand::CloseDW(DWORD dwReserved)
|
||||||
ShowDW(FALSE);
|
ShowDW(FALSE);
|
||||||
|
|
||||||
if (m_staticToolbar != NULL)
|
if (m_staticToolbar != NULL)
|
||||||
return m_staticToolbar->Close();
|
{
|
||||||
|
m_staticToolbar->Close();
|
||||||
|
delete m_staticToolbar;
|
||||||
|
m_staticToolbar = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_SFToolbar != NULL)
|
if (m_SFToolbar != NULL)
|
||||||
return m_SFToolbar->Close();
|
{
|
||||||
|
m_SFToolbar->Close();
|
||||||
|
delete m_staticToolbar;
|
||||||
|
m_staticToolbar = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_site) m_site.Release();
|
||||||
|
if (m_psmc) m_psmc.Release();
|
||||||
|
if (m_subMenuChild) m_subMenuChild.Release();
|
||||||
|
if (m_subMenuParent) m_subMenuParent.Release();
|
||||||
|
if (m_childBand) m_childBand.Release();
|
||||||
|
if (m_parentBand) m_parentBand.Release();
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMenuBand();
|
CMenuBand();
|
||||||
~CMenuBand();
|
virtual ~CMenuBand();
|
||||||
|
|
||||||
DECLARE_NOT_AGGREGATABLE(CMenuBand)
|
DECLARE_NOT_AGGREGATABLE(CMenuBand)
|
||||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||||
|
|
|
@ -47,7 +47,7 @@ HRESULT WINAPI CMenuDeskBar_Constructor(REFIID riid, LPVOID *ppv)
|
||||||
hr = deskbar->QueryInterface(riid, ppv);
|
hr = deskbar->QueryInterface(riid, ppv);
|
||||||
|
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
deskbar->Release();
|
delete deskbar;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
return hr;
|
return hr;
|
||||||
|
|
|
@ -52,7 +52,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMenuDeskBar();
|
CMenuDeskBar();
|
||||||
~CMenuDeskBar();
|
virtual ~CMenuDeskBar();
|
||||||
|
|
||||||
DECLARE_NOT_AGGREGATABLE(CMenuDeskBar)
|
DECLARE_NOT_AGGREGATABLE(CMenuDeskBar)
|
||||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||||
|
|
|
@ -45,7 +45,7 @@ HRESULT WINAPI CMenuSite_Constructor(REFIID riid, LPVOID *ppv)
|
||||||
hr = site->QueryInterface(riid, ppv);
|
hr = site->QueryInterface(riid, ppv);
|
||||||
|
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
site->Release();
|
delete site;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
|
|
@ -39,7 +39,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMenuSite();
|
CMenuSite();
|
||||||
~CMenuSite() {}
|
virtual ~CMenuSite() {}
|
||||||
|
|
||||||
DECLARE_WND_CLASS_EX(_T("MenuSite"), 0, COLOR_MENU)
|
DECLARE_WND_CLASS_EX(_T("MenuSite"), 0, COLOR_MENU)
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CEnumMergedFolder() : m_UserLocal(NULL), m_AllUSers(NULL), m_FirstDone(FALSE) {}
|
CEnumMergedFolder() : m_UserLocal(NULL), m_AllUSers(NULL), m_FirstDone(FALSE) {}
|
||||||
~CEnumMergedFolder() {}
|
virtual ~CEnumMergedFolder() {}
|
||||||
|
|
||||||
DECLARE_NOT_AGGREGATABLE(CEnumMergedFolder)
|
DECLARE_NOT_AGGREGATABLE(CEnumMergedFolder)
|
||||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||||
|
@ -139,7 +139,7 @@ HRESULT WINAPI CMergedFolder_Constructor(IShellFolder* userLocal, IShellFolder*
|
||||||
|
|
||||||
hr = fld->QueryInterface(riid, ppv);
|
hr = fld->QueryInterface(riid, ppv);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
fld->Release();
|
delete fld;
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMergedFolder() {}
|
CMergedFolder() {}
|
||||||
~CMergedFolder() {}
|
virtual ~CMergedFolder() {}
|
||||||
|
|
||||||
HRESULT _SetSources(IShellFolder* userLocal, IShellFolder* allUSers);
|
HRESULT _SetSources(IShellFolder* userLocal, IShellFolder* allUSers);
|
||||||
|
|
||||||
|
|
|
@ -111,15 +111,9 @@ HRESULT STDMETHODCALLTYPE CAddressBand::GetBandInfo(DWORD dwBandID, DWORD dwView
|
||||||
HRESULT STDMETHODCALLTYPE CAddressBand::SetSite(IUnknown *pUnkSite)
|
HRESULT STDMETHODCALLTYPE CAddressBand::SetSite(IUnknown *pUnkSite)
|
||||||
{
|
{
|
||||||
CComPtr<IBrowserService> browserService;
|
CComPtr<IBrowserService> browserService;
|
||||||
CComPtr<IOleWindow> oleWindow;
|
|
||||||
CComPtr<IShellService> shellService;
|
CComPtr<IShellService> shellService;
|
||||||
CComPtr<IUnknown> offset34;
|
|
||||||
HWND parentWindow;
|
HWND parentWindow;
|
||||||
HWND combobox;
|
HWND combobox;
|
||||||
static const TBBUTTON buttonInfo[] = { {0, 1, TBSTATE_ENABLED, 0} };
|
|
||||||
HIMAGELIST normalImagelist;
|
|
||||||
HIMAGELIST hotImageList;
|
|
||||||
HINSTANCE shellInstance;
|
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (pUnkSite == NULL)
|
if (pUnkSite == NULL)
|
||||||
|
@ -137,7 +131,7 @@ HRESULT STDMETHODCALLTYPE CAddressBand::SetSite(IUnknown *pUnkSite)
|
||||||
|
|
||||||
// get window handle of parent
|
// get window handle of parent
|
||||||
parentWindow = NULL;
|
parentWindow = NULL;
|
||||||
hResult = IUnknown_GetWindow(pUnkSite, &parentWindow);
|
hResult = IUnknown_GetWindow(fSite, &parentWindow);
|
||||||
|
|
||||||
if (!::IsWindow(parentWindow))
|
if (!::IsWindow(parentWindow))
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
@ -182,35 +176,43 @@ HRESULT STDMETHODCALLTYPE CAddressBand::SetSite(IUnknown *pUnkSite)
|
||||||
// TODO: properly initialize this from registry
|
// TODO: properly initialize this from registry
|
||||||
fGoButtonShown = true;
|
fGoButtonShown = true;
|
||||||
|
|
||||||
shellInstance = GetModuleHandle(_T("shell32.dll"));
|
if (fGoButtonShown)
|
||||||
normalImagelist = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_NORMAL),
|
|
||||||
20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION);
|
|
||||||
hotImageList = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_HOT),
|
|
||||||
20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION);
|
|
||||||
|
|
||||||
fGoButton = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAMEW, 0, WS_CHILD | WS_CLIPSIBLINGS |
|
|
||||||
WS_CLIPCHILDREN | TBSTYLE_LIST | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CCS_NODIVIDER |
|
|
||||||
CCS_NOPARENTALIGN | CCS_NORESIZE,
|
|
||||||
0, 0, 0, 0, m_hWnd, NULL, _AtlBaseModule.GetModuleInstance(), NULL);
|
|
||||||
SendMessage(fGoButton, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
|
|
||||||
SendMessage(fGoButton, TB_SETMAXTEXTROWS, 1, 0);
|
|
||||||
if (normalImagelist)
|
|
||||||
SendMessage(fGoButton, TB_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(normalImagelist));
|
|
||||||
if (hotImageList)
|
|
||||||
SendMessage(fGoButton, TB_SETHOTIMAGELIST, 0, reinterpret_cast<LPARAM>(hotImageList));
|
|
||||||
SendMessage(fGoButton, TB_ADDSTRINGW,
|
|
||||||
reinterpret_cast<WPARAM>(_AtlBaseModule.GetResourceInstance()), IDS_GOBUTTONLABEL);
|
|
||||||
SendMessage(fGoButton, TB_ADDBUTTONSW, 1, (LPARAM)&buttonInfo);
|
|
||||||
|
|
||||||
IImageList * piml;
|
|
||||||
HRESULT hr = SHGetImageList(SHIL_SMALL, IID_PPV_ARG(IImageList, &piml));
|
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
|
||||||
{
|
{
|
||||||
SendMessageW(combobox, CBEM_SETIMAGELIST, 0, 0);
|
const TBBUTTON buttonInfo [] = { { 0, 1, TBSTATE_ENABLED, 0 } };
|
||||||
}
|
HIMAGELIST normalImagelist;
|
||||||
else
|
HIMAGELIST hotImageList;
|
||||||
{
|
HINSTANCE shellInstance;
|
||||||
SendMessageW(combobox, CBEM_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(piml));
|
|
||||||
|
shellInstance = GetModuleHandle(_T("shell32.dll"));
|
||||||
|
normalImagelist = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_NORMAL),
|
||||||
|
20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION);
|
||||||
|
hotImageList = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_HOT),
|
||||||
|
20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION);
|
||||||
|
|
||||||
|
fGoButton = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAMEW, 0, WS_CHILD | WS_CLIPSIBLINGS |
|
||||||
|
WS_CLIPCHILDREN | TBSTYLE_LIST | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CCS_NODIVIDER |
|
||||||
|
CCS_NOPARENTALIGN | CCS_NORESIZE,
|
||||||
|
0, 0, 0, 0, m_hWnd, NULL, _AtlBaseModule.GetModuleInstance(), NULL);
|
||||||
|
SendMessage(fGoButton, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
|
||||||
|
SendMessage(fGoButton, TB_SETMAXTEXTROWS, 1, 0);
|
||||||
|
if (normalImagelist)
|
||||||
|
SendMessage(fGoButton, TB_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(normalImagelist));
|
||||||
|
if (hotImageList)
|
||||||
|
SendMessage(fGoButton, TB_SETHOTIMAGELIST, 0, reinterpret_cast<LPARAM>(hotImageList));
|
||||||
|
SendMessage(fGoButton, TB_ADDSTRINGW,
|
||||||
|
reinterpret_cast<WPARAM>(_AtlBaseModule.GetResourceInstance()), IDS_GOBUTTONLABEL);
|
||||||
|
SendMessage(fGoButton, TB_ADDBUTTONSW, 1, (LPARAM) &buttonInfo);
|
||||||
|
|
||||||
|
IImageList * piml;
|
||||||
|
HRESULT hr = SHGetImageList(SHIL_SMALL, IID_PPV_ARG(IImageList, &piml));
|
||||||
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
|
{
|
||||||
|
SendMessageW(combobox, CBEM_SETIMAGELIST, 0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SendMessageW(combobox, CBEM_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(piml));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// take advice to watch events
|
// take advice to watch events
|
||||||
|
@ -252,6 +254,9 @@ HRESULT STDMETHODCALLTYPE CAddressBand::CloseDW(DWORD dwReserved)
|
||||||
|
|
||||||
m_hWnd = NULL;
|
m_hWnd = NULL;
|
||||||
|
|
||||||
|
if (fAddressEditBox) fAddressEditBox.Release();
|
||||||
|
if (fSite) fSite.Release();
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -662,8 +667,8 @@ LRESULT CAddressBand::OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||||
|
|
||||||
HRESULT CreateAddressBand(REFIID riid, void **ppv)
|
HRESULT CreateAddressBand(REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
CComObject<CAddressBand> *theMenuBar;
|
CAddressBand *theMenuBar;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (ppv == NULL)
|
if (ppv == NULL)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
|
@ -45,7 +45,7 @@ private:
|
||||||
DWORD fAdviseCookie;
|
DWORD fAdviseCookie;
|
||||||
public:
|
public:
|
||||||
CAddressBand();
|
CAddressBand();
|
||||||
~CAddressBand();
|
virtual ~CAddressBand();
|
||||||
private:
|
private:
|
||||||
void FocusChange(BOOL bFocus);
|
void FocusChange(BOOL bFocus);
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -95,6 +95,44 @@ HRESULT IUnknown_TranslateAcceleratorIO(IUnknown * punk, MSG * pmsg)
|
||||||
return pio->TranslateAcceleratorIO(pmsg);
|
return pio->TranslateAcceleratorIO(pmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT IUnknown_RelayWinEvent(IUnknown * punk, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||||
|
{
|
||||||
|
CComPtr<IWinEventHandler> menuWinEventHandler;
|
||||||
|
HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
|
||||||
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
return hResult;
|
||||||
|
hResult = menuWinEventHandler->IsWindowOwner(hWnd);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
return hResult;
|
||||||
|
if (hResult == S_OK)
|
||||||
|
return menuWinEventHandler->OnWinEvent(hWnd, uMsg, wParam, lParam, theResult);
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT IUnknown_ShowDW(IUnknown * punk, BOOL fShow)
|
||||||
|
{
|
||||||
|
CComPtr<IDockingWindow> dockingWindow;
|
||||||
|
HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
||||||
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
return hResult;
|
||||||
|
hResult = dockingWindow->ShowDW(fShow);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
return hResult;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT IUnknown_CloseDW(IUnknown * punk, DWORD dwReserved)
|
||||||
|
{
|
||||||
|
CComPtr<IDockingWindow> dockingWindow;
|
||||||
|
HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
||||||
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
return hResult;
|
||||||
|
hResult = dockingWindow->CloseDW(dwReserved);
|
||||||
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
return hResult;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
typedef HRESULT(*PMENUBAND_CONSTRUCTOR)(REFIID riid, void **ppv);
|
typedef HRESULT(*PMENUBAND_CONSTRUCTOR)(REFIID riid, void **ppv);
|
||||||
|
|
||||||
class CInternetToolbar;
|
class CInternetToolbar;
|
||||||
|
@ -180,31 +218,19 @@ CDockSite::~CDockSite()
|
||||||
|
|
||||||
HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags)
|
HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags)
|
||||||
{
|
{
|
||||||
CComPtr<IObjectWithSite> child;
|
|
||||||
CComPtr<IOleWindow> oleWindow;
|
|
||||||
CComPtr<IDeskBand> deskBand;
|
|
||||||
TCHAR textBuffer[40];
|
TCHAR textBuffer[40];
|
||||||
REBARBANDINFOW bandInfo;
|
REBARBANDINFOW bandInfo;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
hResult = containedBand->QueryInterface(IID_PPV_ARG(IObjectWithSite, &child));
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = containedBand->QueryInterface(IID_PPV_ARG(IOleWindow, &oleWindow));
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = containedBand->QueryInterface(IID_PPV_ARG(IDeskBand, &deskBand));
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
fContainedBand = containedBand;
|
fContainedBand = containedBand;
|
||||||
fToolbar = browser;
|
fToolbar = browser;
|
||||||
fRebarWindow = hwnd;
|
fRebarWindow = hwnd;
|
||||||
fBandID = bandID;
|
fBandID = bandID;
|
||||||
fFlags = flags;
|
fFlags = flags;
|
||||||
hResult = child->SetSite(static_cast<IOleWindow *>(this));
|
hResult = IUnknown_SetSite(containedBand, static_cast<IOleWindow *>(this));
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
hResult = oleWindow->GetWindow(&fChildWindow);
|
hResult = IUnknown_GetWindow(containedBand, &fChildWindow);
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
|
|
||||||
|
@ -533,10 +559,9 @@ CInternetToolbar::~CInternetToolbar()
|
||||||
|
|
||||||
void CInternetToolbar::AddDockItem(IUnknown *newItem, int bandID, int flags)
|
void CInternetToolbar::AddDockItem(IUnknown *newItem, int bandID, int flags)
|
||||||
{
|
{
|
||||||
CDockSite *newSite;
|
CComPtr<CDockSite> newSite;
|
||||||
|
|
||||||
newSite = new CComObject<CDockSite>;
|
newSite = new CComObject<CDockSite>;
|
||||||
newSite->AddRef();
|
|
||||||
newSite->Initialize(newItem, this, fMainReBar, bandID, flags);
|
newSite->Initialize(newItem, this, fMainReBar, bandID, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -624,10 +649,7 @@ HRESULT CInternetToolbar::CreateMenuBar(IShellMenu **menuBar)
|
||||||
hResult = (*menuBar)->SetMenu((HMENU)V_INTREF(&menuOut), ownerWindow, SMSET_DONTOWN);
|
hResult = (*menuBar)->SetMenu((HMENU)V_INTREF(&menuOut), ownerWindow, SMSET_DONTOWN);
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
hResult = (*menuBar)->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &commandTarget));
|
hResult = IUnknown_Exec(*menuBar, CGID_MenuBand, 3, 1, NULL, NULL);
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = commandTarget->Exec(&CGID_MenuBand, 3, 1, NULL, NULL);
|
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -635,43 +657,25 @@ HRESULT CInternetToolbar::CreateMenuBar(IShellMenu **menuBar)
|
||||||
|
|
||||||
HRESULT CInternetToolbar::CreateBrandBand(IUnknown **logoBar)
|
HRESULT CInternetToolbar::CreateBrandBand(IUnknown **logoBar)
|
||||||
{
|
{
|
||||||
CComPtr<IUnknown> tempBand;
|
|
||||||
HRESULT hResult;
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
hResult = ::CreateBrandBand(IID_PPV_ARG(IUnknown, logoBar));
|
return ::CreateBrandBand(IID_PPV_ARG(IUnknown, logoBar));
|
||||||
#else
|
#else
|
||||||
hResult = CoCreateInstance(CLSID_BrandBand, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, logoBar));
|
return CoCreateInstance(CLSID_BrandBand, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, logoBar));
|
||||||
#endif
|
#endif
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
return S_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CInternetToolbar::CreateToolsBar(IUnknown **toolsBar)
|
HRESULT CInternetToolbar::CreateToolsBar(IUnknown **toolsBar)
|
||||||
{
|
{
|
||||||
HRESULT hResult;
|
return ::CreateToolsBar(IID_PPV_ARG(IUnknown, toolsBar));
|
||||||
|
|
||||||
hResult = ::CreateToolsBar(IID_PPV_ARG(IUnknown, toolsBar));
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
return S_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CInternetToolbar::CreateAddressBand(IUnknown **toolsBar)
|
HRESULT CInternetToolbar::CreateAddressBand(IUnknown **toolsBar)
|
||||||
{
|
{
|
||||||
CComPtr<IAddressBand> addressBand;
|
|
||||||
HRESULT hResult;
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
hResult = ::CreateAddressBand(IID_PPV_ARG(IUnknown, toolsBar));
|
return ::CreateAddressBand(IID_PPV_ARG(IUnknown, toolsBar));
|
||||||
#else
|
#else
|
||||||
hResult = CoCreateInstance(CLSID_SH_AddressBand, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, toolsBar));
|
return CoCreateInstance(CLSID_SH_AddressBand, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, toolsBar));
|
||||||
#endif
|
#endif
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = (*toolsBar)->QueryInterface(IID_PPV_ARG(IAddressBand, &addressBand));
|
|
||||||
return S_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CInternetToolbar::LockUnlockToolbars(bool locked)
|
HRESULT CInternetToolbar::LockUnlockToolbars(bool locked)
|
||||||
|
@ -825,43 +829,54 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::ShowDW(BOOL fShow)
|
||||||
if (fShow)
|
if (fShow)
|
||||||
{
|
{
|
||||||
hResult = ReserveBorderSpace();
|
hResult = ReserveBorderSpace();
|
||||||
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fMenuBar)
|
if (fMenuBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_ShowDW(fMenuBar, fShow);
|
||||||
hResult = fMenuBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->ShowDW(fShow);
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fControlsBar)
|
if (fControlsBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_ShowDW(fControlsBar, fShow);
|
||||||
hResult = fControlsBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->ShowDW(fShow);
|
return hResult;
|
||||||
}
|
}
|
||||||
if (fNavigationBar)
|
if (fNavigationBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_ShowDW(fNavigationBar, fShow);
|
||||||
hResult = fNavigationBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->ShowDW(fShow);
|
return hResult;
|
||||||
}
|
}
|
||||||
if (fLogoBar)
|
if (fLogoBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_ShowDW(fLogoBar, fShow);
|
||||||
hResult = fLogoBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->ShowDW(fShow);
|
return hResult;
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void ReleaseCComPtrExpectZero(CComPtr<T>& cptr)
|
void ReleaseCComPtrExpectZero(CComPtr<T>& cptr, BOOL forceRelease = FALSE)
|
||||||
{
|
{
|
||||||
if (cptr.p != NULL)
|
if (cptr.p != NULL)
|
||||||
{
|
{
|
||||||
int nrc = cptr->Release();
|
int nrc = cptr->Release();
|
||||||
if (nrc > 0)
|
if (nrc > 0)
|
||||||
{
|
{
|
||||||
DbgPrint("WARNING: Unexpected RefCount > 0!\n");
|
DbgPrint("WARNING: Unexpected RefCount > 0 (%d)!\n", nrc);
|
||||||
|
if (forceRelease)
|
||||||
|
{
|
||||||
|
while (nrc > 0)
|
||||||
|
{
|
||||||
|
nrc = cptr->Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cptr.Detach();
|
cptr.Detach();
|
||||||
}
|
}
|
||||||
|
@ -873,32 +888,32 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::CloseDW(DWORD dwReserved)
|
||||||
|
|
||||||
if (fMenuBar)
|
if (fMenuBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_CloseDW(fMenuBar, dwReserved);
|
||||||
hResult = fMenuBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->CloseDW(dwReserved);
|
return hResult;
|
||||||
|
ReleaseCComPtrExpectZero(fMenuBar);
|
||||||
}
|
}
|
||||||
ReleaseCComPtrExpectZero(fMenuBar);
|
|
||||||
if (fControlsBar)
|
if (fControlsBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_CloseDW(fControlsBar, dwReserved);
|
||||||
hResult = fControlsBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->CloseDW(dwReserved);
|
return hResult;
|
||||||
|
ReleaseCComPtrExpectZero(fControlsBar);
|
||||||
}
|
}
|
||||||
ReleaseCComPtrExpectZero(fControlsBar);
|
|
||||||
if (fNavigationBar)
|
if (fNavigationBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_CloseDW(fNavigationBar, dwReserved);
|
||||||
hResult = fNavigationBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->CloseDW(dwReserved);
|
return hResult;
|
||||||
|
ReleaseCComPtrExpectZero(fNavigationBar);
|
||||||
}
|
}
|
||||||
ReleaseCComPtrExpectZero(fNavigationBar);
|
|
||||||
if (fLogoBar)
|
if (fLogoBar)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
hResult = IUnknown_CloseDW(fLogoBar, dwReserved);
|
||||||
hResult = fLogoBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = dockingWindow->CloseDW(dwReserved);
|
return hResult;
|
||||||
|
ReleaseCComPtrExpectZero(fLogoBar);
|
||||||
}
|
}
|
||||||
ReleaseCComPtrExpectZero(fLogoBar);
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -971,9 +986,6 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::InitNew()
|
||||||
CComPtr<IUnknown> logoBar;
|
CComPtr<IUnknown> logoBar;
|
||||||
CComPtr<IUnknown> toolsBar;
|
CComPtr<IUnknown> toolsBar;
|
||||||
CComPtr<IUnknown> navigationBar;
|
CComPtr<IUnknown> navigationBar;
|
||||||
CComPtr<IOleWindow> menuOleWindow;
|
|
||||||
CComPtr<IOleWindow> toolbarOleWindow;
|
|
||||||
CComPtr<IOleWindow> navigationOleWindow;
|
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
/* Create and attach the menubar to the rebar */
|
/* Create and attach the menubar to the rebar */
|
||||||
|
@ -982,8 +994,7 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::InitNew()
|
||||||
return hResult;
|
return hResult;
|
||||||
AddDockItem(menuBar, ITBBID_MENUBAND, CDockSite::ITF_NOTITLE | CDockSite::ITF_NEWBANDALWAYS | CDockSite::ITF_GRIPPERALWAYS);
|
AddDockItem(menuBar, ITBBID_MENUBAND, CDockSite::ITF_NOTITLE | CDockSite::ITF_NEWBANDALWAYS | CDockSite::ITF_GRIPPERALWAYS);
|
||||||
|
|
||||||
hResult = menuBar->QueryInterface(IID_PPV_ARG(IOleWindow, &menuOleWindow));
|
hResult = IUnknown_GetWindow(menuBar, &fMenuBandWindow);
|
||||||
hResult = menuOleWindow->GetWindow(&fMenuBandWindow);
|
|
||||||
fMenuBar.Attach(menuBar.Detach()); // transfer the ref count
|
fMenuBar.Attach(menuBar.Detach()); // transfer the ref count
|
||||||
|
|
||||||
// FIXME: The ros Rebar does not properly support fixed-size items such as the brandband,
|
// FIXME: The ros Rebar does not properly support fixed-size items such as the brandband,
|
||||||
|
@ -1003,10 +1014,7 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::InitNew()
|
||||||
return hResult;
|
return hResult;
|
||||||
AddDockItem(toolsBar, ITBBID_TOOLSBAND, CDockSite::ITF_NOTITLE | CDockSite::ITF_NEWBANDALWAYS | CDockSite::ITF_GRIPPERALWAYS);
|
AddDockItem(toolsBar, ITBBID_TOOLSBAND, CDockSite::ITF_NOTITLE | CDockSite::ITF_NEWBANDALWAYS | CDockSite::ITF_GRIPPERALWAYS);
|
||||||
fControlsBar.Attach(toolsBar.Detach()); // transfer the ref count
|
fControlsBar.Attach(toolsBar.Detach()); // transfer the ref count
|
||||||
hResult = fControlsBar->QueryInterface(IID_PPV_ARG(IOleWindow, &toolbarOleWindow));
|
hResult = IUnknown_GetWindow(fControlsBar, &fToolbarWindow);
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = toolbarOleWindow->GetWindow(&fToolbarWindow);
|
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
|
|
||||||
|
@ -1015,9 +1023,8 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::InitNew()
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
AddDockItem(navigationBar, ITBBID_ADDRESSBAND, CDockSite::ITF_NEWBANDALWAYS | CDockSite::ITF_GRIPPERALWAYS);
|
AddDockItem(navigationBar, ITBBID_ADDRESSBAND, CDockSite::ITF_NEWBANDALWAYS | CDockSite::ITF_GRIPPERALWAYS);
|
||||||
hResult = navigationBar->QueryInterface(IID_PPV_ARG(IOleWindow, &navigationOleWindow));
|
|
||||||
hResult = navigationOleWindow->GetWindow(&fNavigationWindow);
|
|
||||||
fNavigationBar.Attach(navigationBar.Detach());
|
fNavigationBar.Attach(navigationBar.Detach());
|
||||||
|
hResult = IUnknown_GetWindow(fNavigationBar, &fNavigationWindow);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -1330,16 +1337,27 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::QueryService(REFGUID guidService, RE
|
||||||
HRESULT STDMETHODCALLTYPE CInternetToolbar::OnWinEvent(
|
HRESULT STDMETHODCALLTYPE CInternetToolbar::OnWinEvent(
|
||||||
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
|
||||||
{
|
{
|
||||||
CComPtr<IWinEventHandler> menuWinEventHandler;
|
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (fMenuBar)
|
if (fMenuBar)
|
||||||
{
|
{
|
||||||
hResult = fMenuBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
|
hResult = IUnknown_RelayWinEvent(fMenuBar, hWnd, uMsg, wParam, lParam, theResult);
|
||||||
if (menuWinEventHandler->IsWindowOwner(hWnd) == S_OK)
|
if (hResult != S_FALSE)
|
||||||
{
|
return hResult;
|
||||||
return menuWinEventHandler->OnWinEvent(fMenuBandWindow, uMsg, wParam, lParam, theResult);
|
}
|
||||||
}
|
|
||||||
|
if (fNavigationBar)
|
||||||
|
{
|
||||||
|
hResult = IUnknown_RelayWinEvent(fNavigationBar, hWnd, uMsg, wParam, lParam, theResult);
|
||||||
|
if (hResult != S_FALSE)
|
||||||
|
return hResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fLogoBar)
|
||||||
|
{
|
||||||
|
hResult = IUnknown_RelayWinEvent(fLogoBar, hWnd, uMsg, wParam, lParam, theResult);
|
||||||
|
if (hResult != S_FALSE)
|
||||||
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
|
@ -1347,16 +1365,19 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::OnWinEvent(
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CInternetToolbar::IsWindowOwner(HWND hWnd)
|
HRESULT STDMETHODCALLTYPE CInternetToolbar::IsWindowOwner(HWND hWnd)
|
||||||
{
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CInternetToolbar::AddBand(IUnknown *punk)
|
HRESULT STDMETHODCALLTYPE CInternetToolbar::AddBand(IUnknown *punk)
|
||||||
{
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CInternetToolbar::EnumBands(UINT uBand, DWORD *pdwBandID)
|
HRESULT STDMETHODCALLTYPE CInternetToolbar::EnumBands(UINT uBand, DWORD *pdwBandID)
|
||||||
{
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1751,37 +1772,12 @@ LRESULT CInternetToolbar::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOO
|
||||||
{
|
{
|
||||||
LRESULT theResult;
|
LRESULT theResult;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HWND target = (HWND) lParam;
|
|
||||||
|
|
||||||
if (fMenuBar)
|
hResult = OnWinEvent((HWND) lParam, uMsg, wParam, lParam, &theResult);
|
||||||
{
|
|
||||||
CComPtr<IWinEventHandler> menuWinEventHandler;
|
|
||||||
hResult = fMenuBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
|
|
||||||
if (SUCCEEDED(hResult))
|
|
||||||
{
|
|
||||||
if (menuWinEventHandler->IsWindowOwner(target) == S_OK)
|
|
||||||
{
|
|
||||||
hResult = menuWinEventHandler->OnWinEvent(target, uMsg, wParam, lParam, &theResult);
|
|
||||||
return FAILED(hResult) ? 0 : theResult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fNavigationBar)
|
bHandled = hResult == S_OK;
|
||||||
{
|
|
||||||
CComPtr<IWinEventHandler> menuWinEventHandler;
|
|
||||||
hResult = fNavigationBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
|
|
||||||
if (SUCCEEDED(hResult))
|
|
||||||
{
|
|
||||||
if (menuWinEventHandler->IsWindowOwner(target) == S_OK)
|
|
||||||
{
|
|
||||||
hResult = menuWinEventHandler->OnWinEvent(target, uMsg, wParam, lParam, &theResult);
|
|
||||||
return FAILED(hResult) ? 0 : theResult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
|
||||||
}
|
}
|
||||||
LRESULT CInternetToolbar::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
LRESULT CInternetToolbar::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
||||||
{
|
{
|
||||||
|
@ -1789,37 +1785,13 @@ LRESULT CInternetToolbar::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
|
||||||
LRESULT theResult;
|
LRESULT theResult;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
notifyHeader = (NMHDR *) lParam;
|
notifyHeader = reinterpret_cast<NMHDR *>(lParam);
|
||||||
|
|
||||||
if (fMenuBar)
|
hResult = OnWinEvent(notifyHeader->hwndFrom, uMsg, wParam, lParam, &theResult);
|
||||||
{
|
|
||||||
CComPtr<IWinEventHandler> menuWinEventHandler;
|
|
||||||
hResult = fMenuBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
|
|
||||||
if (SUCCEEDED(hResult))
|
|
||||||
{
|
|
||||||
if (menuWinEventHandler->IsWindowOwner(notifyHeader->hwndFrom) == S_OK)
|
|
||||||
{
|
|
||||||
hResult = menuWinEventHandler->OnWinEvent(notifyHeader->hwndFrom, uMsg, wParam, lParam, &theResult);
|
|
||||||
return FAILED(hResult) ? 0 : theResult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fNavigationBar)
|
bHandled = hResult == S_OK;
|
||||||
{
|
|
||||||
CComPtr<IWinEventHandler> menuWinEventHandler;
|
|
||||||
hResult = fNavigationBar->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
|
|
||||||
if (SUCCEEDED(hResult))
|
|
||||||
{
|
|
||||||
if (menuWinEventHandler->IsWindowOwner(notifyHeader->hwndFrom) == S_OK)
|
|
||||||
{
|
|
||||||
hResult = menuWinEventHandler->OnWinEvent(notifyHeader->hwndFrom, uMsg, wParam, lParam, &theResult);
|
|
||||||
return FAILED(hResult) ? 0 : theResult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return FAILED_UNEXPECTEDLY(hResult) ? 0 : theResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT CInternetToolbar::OnLDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
LRESULT CInternetToolbar::OnLDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
||||||
|
@ -1884,8 +1856,8 @@ LRESULT CInternetToolbar::OnLUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &b
|
||||||
|
|
||||||
HRESULT CreateInternetToolbar(REFIID riid, void **ppv)
|
HRESULT CreateInternetToolbar(REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
CComObject<CInternetToolbar> *theToolbar;
|
CInternetToolbar *theToolbar;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (ppv == NULL)
|
if (ppv == NULL)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
|
@ -45,7 +45,7 @@ private:
|
||||||
CComPtr<IShellMenu> fFavoritesMenu;
|
CComPtr<IShellMenu> fFavoritesMenu;
|
||||||
public:
|
public:
|
||||||
CMenuCallback();
|
CMenuCallback();
|
||||||
~CMenuCallback();
|
virtual ~CMenuCallback();
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE GetObject(LPSMDATA psmd, REFIID riid, void **ppvObject);
|
HRESULT STDMETHODCALLTYPE GetObject(LPSMDATA psmd, REFIID riid, void **ppvObject);
|
||||||
public:
|
public:
|
||||||
|
@ -94,7 +94,7 @@ public:
|
||||||
LONG fStartHeight;
|
LONG fStartHeight;
|
||||||
public:
|
public:
|
||||||
CInternetToolbar();
|
CInternetToolbar();
|
||||||
~CInternetToolbar();
|
virtual ~CInternetToolbar();
|
||||||
void AddDockItem(IUnknown *newItem, int bandID, int flags);
|
void AddDockItem(IUnknown *newItem, int bandID, int flags);
|
||||||
HRESULT ReserveBorderSpace(LONG maxHeight = -1);
|
HRESULT ReserveBorderSpace(LONG maxHeight = -1);
|
||||||
HRESULT CreateMenuBar(IShellMenu **menuBar);
|
HRESULT CreateMenuBar(IShellMenu **menuBar);
|
||||||
|
|
|
@ -82,6 +82,78 @@ Win32DbgPrint(const char *filename, int line, const char *lpFormat, ...)
|
||||||
#define FAILED_UNEXPECTEDLY(hr) FAILED(hr)
|
#define FAILED_UNEXPECTEDLY(hr) FAILED(hr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
template <class Base>
|
||||||
|
class CComDebugObject : public Base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CComDebugObject(void * = NULL)
|
||||||
|
{
|
||||||
|
_pAtlModule->Lock();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~CComDebugObject()
|
||||||
|
{
|
||||||
|
this->FinalRelease();
|
||||||
|
_pAtlModule->Unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
STDMETHOD_(ULONG, AddRef)()
|
||||||
|
{
|
||||||
|
int rc = this->InternalAddRef();
|
||||||
|
DbgPrint("RefCount is now %d(++)!\n", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
STDMETHOD_(ULONG, Release)()
|
||||||
|
{
|
||||||
|
ULONG newRefCount;
|
||||||
|
|
||||||
|
newRefCount = this->InternalRelease();
|
||||||
|
DbgPrint("RefCount is now %d(--)!\n", newRefCount);
|
||||||
|
if (newRefCount == 0)
|
||||||
|
delete this;
|
||||||
|
return newRefCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
STDMETHOD(QueryInterface)(REFIID iid, void **ppvObject)
|
||||||
|
{
|
||||||
|
return this->_InternalQueryInterface(iid, ppvObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI CreateInstance(CComDebugObject<Base> **pp)
|
||||||
|
{
|
||||||
|
CComDebugObject<Base> *newInstance;
|
||||||
|
HRESULT hResult;
|
||||||
|
|
||||||
|
ATLASSERT(pp != NULL);
|
||||||
|
if (pp == NULL)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
|
hResult = E_OUTOFMEMORY;
|
||||||
|
newInstance = NULL;
|
||||||
|
ATLTRY(newInstance = new CComDebugObject<Base>())
|
||||||
|
if (newInstance != NULL)
|
||||||
|
{
|
||||||
|
newInstance->SetVoid(NULL);
|
||||||
|
newInstance->InternalFinalConstructAddRef();
|
||||||
|
hResult = newInstance->_AtlInitialConstruct();
|
||||||
|
if (SUCCEEDED(hResult))
|
||||||
|
hResult = newInstance->FinalConstruct();
|
||||||
|
if (SUCCEEDED(hResult))
|
||||||
|
hResult = newInstance->_AtlFinalConstruct();
|
||||||
|
newInstance->InternalFinalConstructRelease();
|
||||||
|
if (hResult != S_OK)
|
||||||
|
{
|
||||||
|
delete newInstance;
|
||||||
|
newInstance = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*pp = newInstance;
|
||||||
|
return hResult;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(browseui);
|
WINE_DEFAULT_DEBUG_CHANNEL(browseui);
|
||||||
|
|
||||||
#endif /* _BROWSEUI_PCH_ */
|
#endif /* _BROWSEUI_PCH_ */
|
||||||
|
|
|
@ -29,6 +29,8 @@ BOOL WINAPI Shell_GetImageLists(
|
||||||
_Out_ HIMAGELIST *phimlSmall
|
_Out_ HIMAGELIST *phimlSmall
|
||||||
);
|
);
|
||||||
|
|
||||||
|
extern HRESULT IUnknown_ShowDW(IUnknown * punk, BOOL fShow);
|
||||||
|
|
||||||
#include "newatlinterfaces.h"
|
#include "newatlinterfaces.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -732,12 +734,9 @@ CShellBrowser::~CShellBrowser()
|
||||||
|
|
||||||
HRESULT CShellBrowser::Initialize(LPITEMIDLIST pidl, long b, long c, long d)
|
HRESULT CShellBrowser::Initialize(LPITEMIDLIST pidl, long b, long c, long d)
|
||||||
{
|
{
|
||||||
CComPtr<IDockingWindow> dockingWindow;
|
|
||||||
CComPtr<IStream> settingsStream;
|
|
||||||
CComPtr<IPersistStreamInit> persistStreamInit;
|
CComPtr<IPersistStreamInit> persistStreamInit;
|
||||||
CComPtr<IOleCommandTarget> commandTarget;
|
|
||||||
CComPtr<IObjectWithSite> objectSite;
|
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
CComPtr<IUnknown> clientBar;
|
||||||
|
|
||||||
_AtlInitialConstruct();
|
_AtlInitialConstruct();
|
||||||
|
|
||||||
|
@ -756,55 +755,46 @@ HRESULT CShellBrowser::Initialize(LPITEMIDLIST pidl, long b, long c, long d)
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
#else
|
#else
|
||||||
hResult = CreateInternetToolbar(IID_PPV_ARG(IUnknown, &fClientBars[BIInternetToolbar].clientBar));
|
hResult = CreateInternetToolbar(IID_PPV_ARG(IUnknown, &clientBar));
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
fClientBars[BIInternetToolbar].clientBar = clientBar;
|
||||||
|
|
||||||
// create interfaces
|
// create interfaces
|
||||||
hResult = fClientBars[BIInternetToolbar].clientBar->QueryInterface(
|
hResult = clientBar->QueryInterface(IID_PPV_ARG(IPersistStreamInit, &persistStreamInit));
|
||||||
IID_PPV_ARG(IDockingWindow, &dockingWindow));
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
return hResult;
|
||||||
hResult = fClientBars[BIInternetToolbar].clientBar->QueryInterface(
|
|
||||||
IID_PPV_ARG(IPersistStreamInit, &persistStreamInit));
|
hResult = IUnknown_SetSite(clientBar, static_cast<IShellBrowser *>(this));
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = fClientBars[BIInternetToolbar].clientBar->QueryInterface(
|
|
||||||
IID_PPV_ARG(IOleCommandTarget, &commandTarget));
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = fClientBars[BIInternetToolbar].clientBar->QueryInterface(
|
|
||||||
IID_PPV_ARG(IObjectWithSite, &objectSite));
|
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
|
|
||||||
hResult = objectSite->SetSite(static_cast<IShellBrowser *>(this));
|
hResult = IUnknown_Exec(clientBar, CGID_PrivCITCommands, 1, 1 /* or 0 */, NULL, NULL);
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
|
|
||||||
hResult = commandTarget->Exec(&CGID_PrivCITCommands, 1, 1 /* or 0 */, NULL, NULL);
|
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
|
|
||||||
// TODO: create settingsStream from registry entry
|
// TODO: create settingsStream from registry entry
|
||||||
if (settingsStream.p == NULL)
|
//if (settingsStream.p)
|
||||||
|
//{
|
||||||
|
// hResult = persistStreamInit->Load(settingsStream);
|
||||||
|
// if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
|
// return hResult;
|
||||||
|
//}
|
||||||
|
//else
|
||||||
{
|
{
|
||||||
hResult = persistStreamInit->InitNew();
|
hResult = persistStreamInit->InitNew();
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
hResult = IUnknown_ShowDW(clientBar, TRUE);
|
||||||
hResult = persistStreamInit->Load(settingsStream);
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
}
|
|
||||||
hResult = dockingWindow->ShowDW(TRUE);
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
return hResult;
|
||||||
|
|
||||||
fToolbarProxy.Initialize(m_hWnd, fClientBars[BIInternetToolbar].clientBar);
|
fToolbarProxy.Initialize(m_hWnd, clientBar);
|
||||||
|
|
||||||
|
|
||||||
// create status bar
|
// create status bar
|
||||||
fStatusBar = CreateWindow(STATUSCLASSNAMEW, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
|
fStatusBar = CreateWindow(STATUSCLASSNAMEW, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
|
||||||
|
@ -812,6 +802,7 @@ HRESULT CShellBrowser::Initialize(LPITEMIDLIST pidl, long b, long c, long d)
|
||||||
_AtlBaseModule.GetModuleInstance(), 0);
|
_AtlBaseModule.GetModuleInstance(), 0);
|
||||||
fStatusBarVisible = true;
|
fStatusBarVisible = true;
|
||||||
|
|
||||||
|
|
||||||
// browse
|
// browse
|
||||||
hResult = BrowseToPIDL(pidl, BTP_UPDATE_NEXT_HISTORY);
|
hResult = BrowseToPIDL(pidl, BTP_UPDATE_NEXT_HISTORY);
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
|
@ -1091,14 +1082,8 @@ HRESULT CShellBrowser::GetMenuBand(REFIID riid, void **shellMenu)
|
||||||
CComPtr<IDeskBand> deskBand;
|
CComPtr<IDeskBand> deskBand;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (fClientBars[BIInternetToolbar].clientBar.p == NULL)
|
hResult = IUnknown_QueryService(fClientBars[BIInternetToolbar].clientBar, SID_IBandSite, IID_PPV_ARG(IBandSite, &bandSite));
|
||||||
return E_FAIL;
|
if (FAILED_UNEXPECTEDLY(hResult))
|
||||||
hResult = fClientBars[BIInternetToolbar].clientBar->QueryInterface(
|
|
||||||
IID_PPV_ARG(IServiceProvider, &serviceProvider));
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
|
||||||
hResult = serviceProvider->QueryService(SID_IBandSite, IID_PPV_ARG(IBandSite, &bandSite));
|
|
||||||
if (FAILED(hResult))
|
|
||||||
return hResult;
|
return hResult;
|
||||||
hResult = bandSite->QueryBand(1, &deskBand, NULL, NULL, 0);
|
hResult = bandSite->QueryBand(1, &deskBand, NULL, NULL, 0);
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
|
@ -1291,7 +1276,6 @@ LRESULT CALLBACK CShellBrowser::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam,
|
||||||
CShellBrowser *pThis = reinterpret_cast<CShellBrowser *>(hWnd);
|
CShellBrowser *pThis = reinterpret_cast<CShellBrowser *>(hWnd);
|
||||||
_ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
|
_ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
|
||||||
LRESULT lResult;
|
LRESULT lResult;
|
||||||
CComPtr<IMenuBand> menuBand;
|
|
||||||
const _ATL_MSG *previousMessage;
|
const _ATL_MSG *previousMessage;
|
||||||
BOOL handled;
|
BOOL handled;
|
||||||
WNDPROC saveWindowProc;
|
WNDPROC saveWindowProc;
|
||||||
|
@ -1301,6 +1285,7 @@ LRESULT CALLBACK CShellBrowser::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam,
|
||||||
previousMessage = pThis->m_pCurrentMsg;
|
previousMessage = pThis->m_pCurrentMsg;
|
||||||
pThis->m_pCurrentMsg = &msg;
|
pThis->m_pCurrentMsg = &msg;
|
||||||
|
|
||||||
|
CComPtr<IMenuBand> menuBand;
|
||||||
hResult = pThis->GetMenuBand(IID_PPV_ARG(IMenuBand, &menuBand));
|
hResult = pThis->GetMenuBand(IID_PPV_ARG(IMenuBand, &menuBand));
|
||||||
if (SUCCEEDED(hResult) && menuBand.p != NULL)
|
if (SUCCEEDED(hResult) && menuBand.p != NULL)
|
||||||
{
|
{
|
||||||
|
@ -1311,6 +1296,7 @@ LRESULT CALLBACK CShellBrowser::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam,
|
||||||
wParam = msg.wParam;
|
wParam = msg.wParam;
|
||||||
lParam = msg.lParam;
|
lParam = msg.lParam;
|
||||||
}
|
}
|
||||||
|
menuBand.Release();
|
||||||
|
|
||||||
handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
|
handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
|
||||||
ATLASSERT(pThis->m_pCurrentMsg == &msg);
|
ATLASSERT(pThis->m_pCurrentMsg == &msg);
|
||||||
|
@ -1867,7 +1853,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU h
|
||||||
CComPtr<IShellMenu> shellMenu;
|
CComPtr<IShellMenu> shellMenu;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (IsMenu(hmenuShared) == FALSE)
|
if (hmenuShared && IsMenu(hmenuShared) == FALSE)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
hResult = GetMenuBand(IID_PPV_ARG(IShellMenu, &shellMenu));
|
hResult = GetMenuBand(IID_PPV_ARG(IShellMenu, &shellMenu));
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
|
@ -1882,7 +1868,10 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU h
|
||||||
HRESULT STDMETHODCALLTYPE CShellBrowser::RemoveMenusSB(HMENU hmenuShared)
|
HRESULT STDMETHODCALLTYPE CShellBrowser::RemoveMenusSB(HMENU hmenuShared)
|
||||||
{
|
{
|
||||||
if (hmenuShared == fCurrentMenuBar)
|
if (hmenuShared == fCurrentMenuBar)
|
||||||
fCurrentMenuBar = NULL;
|
{
|
||||||
|
//DestroyMenu(fCurrentMenuBar);
|
||||||
|
SetMenuSB(NULL, NULL, NULL);
|
||||||
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3072,7 +3061,7 @@ LRESULT CShellBrowser::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &b
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void ReleaseCComPtrExpectZero(CComPtr<T>& cptr)
|
void ReleaseCComPtrExpectZero(CComPtr<T>& cptr, BOOL forceRelease = FALSE)
|
||||||
{
|
{
|
||||||
if (cptr.p != NULL)
|
if (cptr.p != NULL)
|
||||||
{
|
{
|
||||||
|
@ -3080,6 +3069,13 @@ void ReleaseCComPtrExpectZero(CComPtr<T>& cptr)
|
||||||
if (nrc > 0)
|
if (nrc > 0)
|
||||||
{
|
{
|
||||||
DbgPrint("WARNING: Unexpected RefCount > 0!\n");
|
DbgPrint("WARNING: Unexpected RefCount > 0!\n");
|
||||||
|
if (forceRelease)
|
||||||
|
{
|
||||||
|
while (nrc > 0)
|
||||||
|
{
|
||||||
|
nrc = cptr->Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cptr.Detach();
|
cptr.Detach();
|
||||||
}
|
}
|
||||||
|
@ -3361,8 +3357,8 @@ LRESULT CShellBrowser::RelayCommands(UINT uMsg, WPARAM wParam, LPARAM lParam, BO
|
||||||
|
|
||||||
static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters)
|
static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters)
|
||||||
{
|
{
|
||||||
CComPtr< CComObject<CShellBrowser> > theCabinet;
|
CComPtr<CShellBrowser> theCabinet;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
MSG Msg;
|
MSG Msg;
|
||||||
BOOL Ret;
|
BOOL Ret;
|
||||||
|
|
||||||
|
@ -3384,14 +3380,14 @@ static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Msg.message == WM_QUIT)
|
||||||
|
break;
|
||||||
|
|
||||||
if (theCabinet->v_MayTranslateAccelerator(&Msg) != S_OK)
|
if (theCabinet->v_MayTranslateAccelerator(&Msg) != S_OK)
|
||||||
{
|
{
|
||||||
TranslateMessage(&Msg);
|
TranslateMessage(&Msg);
|
||||||
DispatchMessage(&Msg);
|
DispatchMessage(&Msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Msg.message == WM_QUIT)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TerminateProcess(GetCurrentProcess(), hResult);
|
//TerminateProcess(GetCurrentProcess(), hResult);
|
||||||
|
@ -3399,7 +3395,9 @@ static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters)
|
||||||
int nrc = theCabinet->Release();
|
int nrc = theCabinet->Release();
|
||||||
if (nrc > 0)
|
if (nrc > 0)
|
||||||
{
|
{
|
||||||
DbgPrint("WARNING: There are %d references to the CShellBrowser active or leaked, process will never terminate.\n");
|
DbgPrint("WARNING: There are %d references to the CShellBrowser active or leaked, process will never terminate. Terminating forcefully.\n", nrc);
|
||||||
|
|
||||||
|
//TerminateProcess(GetCurrentProcess(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
theCabinet.Detach();
|
theCabinet.Detach();
|
||||||
|
|
|
@ -37,12 +37,12 @@ class CToolsBand :
|
||||||
public IPersistStream
|
public IPersistStream
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
IDockingWindowSite *fDockSite;
|
CComPtr<IDockingWindowSite> fDockSite;
|
||||||
GUID fExecCommandCategory;
|
GUID fExecCommandCategory;
|
||||||
CComPtr<IOleCommandTarget> fExecCommandTarget;
|
CComPtr<IOleCommandTarget> fExecCommandTarget;
|
||||||
public:
|
public:
|
||||||
CToolsBand();
|
CToolsBand();
|
||||||
~CToolsBand();
|
virtual ~CToolsBand();
|
||||||
public:
|
public:
|
||||||
// *** IDeskBand methods ***
|
// *** IDeskBand methods ***
|
||||||
virtual HRESULT STDMETHODCALLTYPE GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi);
|
virtual HRESULT STDMETHODCALLTYPE GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi);
|
||||||
|
@ -95,14 +95,12 @@ END_COM_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
CToolsBand::CToolsBand()
|
CToolsBand::CToolsBand()
|
||||||
|
: fDockSite(NULL)
|
||||||
{
|
{
|
||||||
fDockSite = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CToolsBand::~CToolsBand()
|
CToolsBand::~CToolsBand()
|
||||||
{
|
{
|
||||||
if (fDockSite)
|
|
||||||
fDockSite->Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CToolsBand::GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi)
|
HRESULT STDMETHODCALLTYPE CToolsBand::GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi)
|
||||||
|
@ -267,8 +265,8 @@ HRESULT STDMETHODCALLTYPE CToolsBand::SetSite(IUnknown* pUnkSite){
|
||||||
HWND toolbar;
|
HWND toolbar;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (fDockSite != NULL)
|
if(fDockSite) fDockSite.Release();
|
||||||
fDockSite->Release();
|
|
||||||
if (pUnkSite == NULL)
|
if (pUnkSite == NULL)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
hResult = pUnkSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &fDockSite));
|
hResult = pUnkSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &fDockSite));
|
||||||
|
@ -364,6 +362,8 @@ HRESULT STDMETHODCALLTYPE CToolsBand::CloseDW(DWORD dwReserved)
|
||||||
|
|
||||||
m_hWnd = NULL;
|
m_hWnd = NULL;
|
||||||
|
|
||||||
|
if (fDockSite) fDockSite.Release();
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,19 +440,19 @@ LRESULT CToolsBand::OnGetButtonInfo(UINT idControl, NMHDR *pNMHDR, BOOL &bHandle
|
||||||
|
|
||||||
HRESULT CreateToolsBar(REFIID riid, void **ppv)
|
HRESULT CreateToolsBar(REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
CComObject<CToolsBand> *theMenuBar;
|
CToolsBand *theToolbar;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
if (ppv == NULL)
|
if (ppv == NULL)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
*ppv = NULL;
|
*ppv = NULL;
|
||||||
ATLTRY (theMenuBar = new CComObject<CToolsBand>);
|
ATLTRY(theToolbar = new CComObject<CToolsBand>);
|
||||||
if (theMenuBar == NULL)
|
if (theToolbar == NULL)
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
hResult = theMenuBar->QueryInterface(riid, reinterpret_cast<void **>(ppv));
|
hResult = theToolbar->QueryInterface(riid, reinterpret_cast<void **>(ppv));
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
{
|
{
|
||||||
delete theMenuBar;
|
delete theToolbar;
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -1382,7 +1382,6 @@ void CDefView::DoActivate(UINT uState)
|
||||||
INT mic = GetMenuItemCount(m_hMenu);
|
INT mic = GetMenuItemCount(m_hMenu);
|
||||||
for (int i = 0; i < mic; i++)
|
for (int i = 0; i < mic; i++)
|
||||||
{
|
{
|
||||||
HMENU submenu = GetSubMenu(m_hMenu, 0);
|
|
||||||
DeleteMenu(m_hMenu, 0, MF_BYPOSITION);
|
DeleteMenu(m_hMenu, 0, MF_BYPOSITION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue