CLSID m_Category;
HMENU m_hView;
+ BOOL m_Destroyed;
private:
HRESULT _MergeToolbar();
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnGetShellBrowser(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+ LRESULT OnNCCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+ LRESULT OnNCDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
+ MESSAGE_HANDLER(WM_NCCREATE, OnNCCreate)
+ MESSAGE_HANDLER(WM_NCDESTROY, OnNCDestroy)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
MESSAGE_HANDLER(WM_NOTIFY, OnNotify)
m_iDragOverItem(0),
m_cScrollDelay(0),
m_isEditing(FALSE),
- m_hView(NULL)
+ m_hView(NULL),
+ m_Destroyed(FALSE)
{
ZeroMemory(&m_FolderSettings, sizeof(m_FolderSettings));
ZeroMemory(&m_sortInfo, sizeof(m_sortInfo));
LRESULT CDefView::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{
- if (m_hMenu)
- DestroyMenu(m_hMenu);
- RevokeDragDrop(m_hWnd);
- SHChangeNotifyDeregister(m_hNotify);
- SHFree(m_pidlParent);
+ if (!m_Destroyed)
+ {
+ m_Destroyed = TRUE;
+ if (m_hMenu)
+ {
+ DestroyMenu(m_hMenu);
+ m_hMenu = NULL;
+ }
+ RevokeDragDrop(m_hWnd);
+ SHChangeNotifyDeregister(m_hNotify);
+ m_hNotify = NULL;
+ SHFree(m_pidlParent);
+ m_pidlParent = NULL;
+ }
bHandled = FALSE;
return 0;
}
return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
}
+LRESULT CDefView::OnNCCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
+{
+ this->AddRef();
+ bHandled = FALSE;
+ return 0;
+}
+
+LRESULT CDefView::OnNCDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
+{
+ this->Release();
+ bHandled = FALSE;
+ return 0;
+}
+
/**********************************************************
* ShellView_OnCreate()
*/
if (FAILED(hResult))
goto cleanup;
- hResult = IUnknown_SetSite(m_pCM, (IShellView *)this);
- //if (FAILED( hResult))
- // goto cleanup;
-
hResult = m_pCM->QueryContextMenu(hMenu, 0, 0x20, 0x7fff, CMF_DEFAULTONLY);
if (FAILED(hResult))
goto cleanup;
DestroyMenu(hMenu);
if (m_pCM)
- {
- IUnknown_SetSite(m_pCM, NULL);
m_pCM.Release();
- }
return hResult;
}
if (FAILED( hResult))
goto cleanup;
- hResult = IUnknown_SetSite(m_pCM, (IShellView *)this);
- //if (FAILED( hResult))
- // goto cleanup;
-
hResult = m_pCM->QueryContextMenu(hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, CMF_NORMAL);
if (FAILED( hResult))
goto cleanup;
cleanup:
if (m_pCM)
- {
- IUnknown_SetSite(m_pCM, NULL);
m_pCM.Release();
- }
if (hMenu)
DestroyMenu(hMenu);
if (FAILED( hResult))
goto cleanup;
- hResult = IUnknown_SetSite(m_pCM, (IShellView *)this);
- //if (FAILED( hResult))
- // goto cleanup;
-
hResult = m_pCM->QueryContextMenu(hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, CMF_NORMAL);
if (FAILED( hResult))
goto cleanup;
cleanup:
if (m_pCM)
- {
- IUnknown_SetSite(m_pCM, NULL);
m_pCM.Release();
- }
if (hMenu)
DestroyMenu(hMenu);
if (m_hMenu)
{
DestroyMenu(m_hMenu);
- m_hView = NULL;
+ m_hMenu = NULL;
}
if (m_ListView)
{
/* We are not above one of the listview's subitems. Bind to the parent folder's
* DropTarget interface. */
- hr = m_pSFParent->QueryInterface(IID_PPV_ARG(IDropTarget,&m_pCurDropTarget));
+ hr = m_pSFParent->CreateViewObject(NULL, IID_PPV_ARG(IDropTarget,&m_pCurDropTarget));
}
else
{