Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
proppgs.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 25k
Category:
Windows Kernel
Development Platform:
Visual C++
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // proppgs.cpp
- //
- // IShellPropSheetExt for channel shortcuts.
- //
- // History:
- //
- // 6/12/97 edwardp Created.
- //
- // Note: The hotkey stuff is comment out, the shell/windows doesn't make it
- // possible to persist hotkey settings across sessions and it isn't
- // worth kicking off another thread at boot to enable this feature.
- //
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Includes
- //
- #include "stdinc.h"
- #include "cdfidl.h"
- #include "persist.h"
- #include "cdfview.h"
- #include "proppgs.h"
- #include "xmlutil.h"
- #include "dll.h"
- #include "iconhand.h"
- #include "resource.h"
- #include "winineti.h"
- #include <iehelpid.h>
- #include <mluisupp.h>
- #pragma warning(disable:4800)
- //
- // Constructor and destructor.
- //
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** CPropertyPages::CPropertyPages ***
- //
- // Constructor for CPropertyPages.
- //
- ////////////////////////////////////////////////////////////////////////////////
- CPropertyPages::CPropertyPages (
- void
- )
- : m_cRef(1)
- {
- ASSERT(NULL == m_pSubscriptionMgr2);
- ASSERT(NULL == m_pInitDataObject);
- TraceMsg(TF_OBJECTS, "+ IShellPropSheetExt");
- DllAddRef();
- return;
- }
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** CPropertyPages::~CPropertyPages ***
- //
- // Destructor.
- //
- ////////////////////////////////////////////////////////////////////////////////
- CPropertyPages::~CPropertyPages (
- void
- )
- {
- if (m_pSubscriptionMgr2)
- m_pSubscriptionMgr2->Release();
- if (m_pInitDataObject)
- m_pInitDataObject->Release();
- ASSERT(0 == m_cRef);
- //
- // Matching Release for the constructor Addref.
- //
- TraceMsg(TF_OBJECTS, "- IShellPropSheetExt");
- DllRelease();
- return;
- }
- //
- // IUnknown methods.
- //
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** CPropertyPages::QueryInterface ***
- //
- // CPropertyPages QI.
- //
- ////////////////////////////////////////////////////////////////////////////////
- STDMETHODIMP
- CPropertyPages::QueryInterface (
- REFIID riid,
- void **ppv
- )
- {
- ASSERT(ppv);
- HRESULT hr;
- *ppv = NULL;
- if (IID_IUnknown == riid || IID_IShellPropSheetExt == riid)
- {
- *ppv = (IShellPropSheetExt*)this;
- }
- else if (IID_IShellExtInit == riid)
- {
- *ppv = (IShellExtInit*)this;
- }
- if (*ppv)
- {
- ((IUnknown*)*ppv)->AddRef();
- hr = S_OK;
- }
- else
- {
- hr = E_NOINTERFACE;
- }
- ASSERT((SUCCEEDED(hr) && *ppv) || (FAILED(hr) && NULL == *ppv));
- return hr;
- }
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** CPropertyPages::AddRef ***
- //
- // CPropertyPages AddRef.
- //
- ////////////////////////////////////////////////////////////////////////////////
- STDMETHODIMP_(ULONG)
- CPropertyPages::AddRef (
- void
- )
- {
- ASSERT(m_cRef != 0);
- ASSERT(m_cRef < (ULONG)-1);
- return ++m_cRef;
- }
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** CPropertyPages::Release ***
- //
- // CContextMenu Release.
- //
- ////////////////////////////////////////////////////////////////////////////////
- STDMETHODIMP_(ULONG)
- CPropertyPages::Release (
- void
- )
- {
- ASSERT (m_cRef != 0);
- ULONG cRef = --m_cRef;
- if (0 == cRef)
- delete this;
- return cRef;
- }
- //
- // IShellPropSheetExt methods.
- //
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** Name ***
- //
- //
- // Description:
- //
- //
- // Parameters:
- //
- //
- // Return:
- //
- //
- // Comments:
- //
- //
- ////////////////////////////////////////////////////////////////////////////////
- STDMETHODIMP
- CPropertyPages::AddPages(
- LPFNADDPROPSHEETPAGE lpfnAddPage,
- LPARAM lParam
- )
- {
- HRESULT hr = S_OK;
- PROPSHEETPAGE psp;
- psp.dwSize = sizeof(PROPSHEETPAGE);
- psp.dwFlags = PSP_DEFAULT | PSP_USECALLBACK;
- psp.hInstance = MLGetHinst();
- psp.pszTemplate = MAKEINTRESOURCE(IDD_CHANNEL_PROP);
- psp.hIcon = NULL;
- psp.pszTitle = NULL;
- psp.pfnDlgProc = PropSheetDlgProc;
- psp.lParam = (LPARAM)(CPropertyPages *)this;
- psp.pfnCallback = PropSheetCallback;
- HPROPSHEETPAGE hpage = CreatePropertySheetPage(&psp);
- if (hpage)
- {
- // Release() happens in PropSheetCallback.
- AddRef();
- // Assume the mess below doesn't work, we want the default page to be us.
- hr = 1;
- // HACKHACK: This code attempts to remove the Folder property pages such as
- // General and Sharing (it will also whack any 3rd party pages which were
- // unfortunate enough to have been loaded before use :)
- PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)lParam;
- // First make sure we can safely access the memory as if it were a
- // PROPSHEETHEADER structure.
- if (!IsBadReadPtr(ppsh, PROPSHEETHEADER_V1_SIZE) &&
- !IsBadWritePtr(ppsh, PROPSHEETHEADER_V1_SIZE))
- {
- // Now see if the module matches shell32
- if (ppsh->hInstance == GetModuleHandle(TEXT("shell32.dll")))
- {
- // looks good so rip 'em out
- for (UINT i = 0; i < ppsh->nPages; i++)
- {
- // At least be a good citizen and delete their pages so we
- // don't leak
- DestroyPropertySheetPage(ppsh->phpage[i]);
- }
- ppsh->nPages = 0;
- // Now we shouldn't need to mess with the default page. If someone
- // loads after us, we may not win.
- hr = 0;
- }
- }
- if (lpfnAddPage(hpage, lParam))
- {
- WCHAR wszURL[INTERNET_MAX_URL_LENGTH];
- SHTCharToUnicode(m_szURL, wszURL, ARRAYSIZE(wszURL));
- if (SUCCEEDED(InitializeSubsMgr2()))
- {
- m_pSubscriptionMgr2->IsSubscribed(wszURL, &m_bStartSubscribed);
- if (m_bStartSubscribed)
- {
- IShellPropSheetExt *pspse;
- if (SUCCEEDED(m_pSubscriptionMgr2->QueryInterface(IID_IShellPropSheetExt,
- (void **)&pspse)))
- {
- pspse->AddPages(lpfnAddPage, lParam);
- pspse->Release();
- }
- }
- }
- }
- else
- {
- DestroyPropertySheetPage(hpage);
- hr = E_FAIL;
- }
- }
- else
- {
- hr = E_OUTOFMEMORY;
- }
- return hr;
- }
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** Name ***
- //
- //
- // Description:
- //
- //
- // Parameters:
- //
- //
- // Return:
- //
- //
- // Comments:
- //
- //
- ////////////////////////////////////////////////////////////////////////////////
- STDMETHODIMP
- CPropertyPages::ReplacePage(
- UINT uPageID,
- LPFNADDPROPSHEETPAGE lpfnAddPage,
- LPARAM lParam
- )
- {
- return E_NOTIMPL;
- }
- //
- // IShellExtInit methods.
- //
- //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\
- //
- // *** Name ***
- //
- //
- // Description:
- //
- //
- // Parameters:
- //
- //
- // Return:
- //
- //
- // Comments:
- //
- //
- ////////////////////////////////////////////////////////////////////////////////
- STDMETHODIMP
- CPropertyPages::Initialize(
- LPCITEMIDLIST pidl,
- LPDATAOBJECT pIDataObject,
- HKEY hkey
- )
- {
- HRESULT hr;
- STGMEDIUM stgmed;
- FORMATETC fmtetc = {CF_HDROP, NULL, DVASPECT_CONTENT, -1,
- TYMED_HGLOBAL};
- if (m_pInitDataObject)
- m_pInitDataObject->Release();
- m_pInitDataObject = pIDataObject;
- m_pInitDataObject->AddRef();
- hr = pIDataObject->GetData(&fmtetc, &stgmed);
- if (SUCCEEDED(hr))
- {
- if (DragQueryFile((HDROP)stgmed.hGlobal, 0, m_szPath,
- ARRAYSIZE(m_szPath)))
- {
- TCHAR szDesktopINI[MAX_PATH];
- PathCombine(szDesktopINI, m_szPath, c_szDesktopINI);
- GetPrivateProfileString(c_szChannel, c_szCDFURL, TEXT(""), m_szURL,
- ARRAYSIZE(m_szURL), szDesktopINI);
- //m_wHotkey = GetPrivateProfileInt(c_szChannel, c_szHotkey, 0, szDesktopINI);
- }
- else
- {
- hr = E_FAIL;
- }
- ReleaseStgMedium(&stgmed);
- }
- return hr;
- }
- //
- // Helper functions
- //
- HRESULT CPropertyPages::InitializeSubsMgr2()
- {
- HRESULT hr = E_FAIL;
- #ifndef UNIX
- if (NULL != m_pSubscriptionMgr2)
- {
- hr = S_OK;
- }
- else
- {
- hr = CoInitialize(NULL);
- if (SUCCEEDED(hr))
- {
- DLL_ForcePreloadDlls(PRELOAD_WEBCHECK);
- hr = CoCreateInstance(CLSID_SubscriptionMgr, NULL,
- CLSCTX_INPROC_SERVER, IID_ISubscriptionMgr2,
- (void**)&m_pSubscriptionMgr2);
- if (SUCCEEDED(hr))
- {
- IShellExtInit* pIShellExtInit;
- hr = m_pSubscriptionMgr2->QueryInterface(IID_IShellExtInit,
- (void **)&pIShellExtInit);
- if (SUCCEEDED(hr))
- {
- hr = pIShellExtInit->Initialize(NULL, m_pInitDataObject, NULL);
- pIShellExtInit->Release();
- }
- }
- }
- CoUninitialize();
- }
- #endif /* !UNIX */
- return hr;
- }
- void CPropertyPages::ShowOfflineSummary(HWND hdlg, BOOL bShow)
- {
- static const int offSumIDs[] =
- {
- IDC_SUMMARY,
- IDC_LAST_SYNC_TEXT,
- IDC_LAST_SYNC,
- IDC_DOWNLOAD_SIZE_TEXT,
- IDC_DOWNLOAD_SIZE,
- IDC_DOWNLOAD_RESULT,
- IDC_DOWNLOAD_RESULT_TEXT,
- IDC_FREE_SPACE_TEXT
- };
- if (bShow)
- {
- TCHAR szLastSync[128];
- TCHAR szDownloadSize[128];
- TCHAR szDownloadResult[128];
- WCHAR wszURL[INTERNET_MAX_URL_LENGTH];
- MLLoadString(IDS_VALUE_UNKNOWN, szLastSync, ARRAYSIZE(szLastSync));
- StrCpyN(szDownloadSize, szLastSync, ARRAYSIZE(szDownloadSize));
- StrCpyN(szDownloadResult, szLastSync, ARRAYSIZE(szDownloadResult));
- SHTCharToUnicode(m_szURL, wszURL, ARRAYSIZE(wszURL));
- ASSERT(NULL != m_pSubscriptionMgr2);
- if (NULL != m_pSubscriptionMgr2)
- {
- ISubscriptionItem *psi;
- if (SUCCEEDED(m_pSubscriptionMgr2->GetItemFromURL(wszURL, &psi)))
- {
- enum { spLastSync, spDownloadSize, spDownloadResult };
- static const LPCWSTR pProps[] =
- {
- c_szPropCompletionTime,
- c_szPropCrawlActualSize,
- c_szPropStatusString
- };
- VARIANT vars[ARRAYSIZE(pProps)];
- if (SUCCEEDED(psi->ReadProperties(ARRAYSIZE(pProps), pProps, vars)))
- {
- if (VT_DATE == vars[spLastSync].vt)
- {
- FILETIME ft, ft2;
- DWORD dwFlags = FDTF_DEFAULT;
- SYSTEMTIME st;
- VariantTimeToSystemTime(vars[spLastSync].date, &st);
- SystemTimeToFileTime(&st, &ft);
- LocalFileTimeToFileTime(&ft, &ft2);
- SHFormatDateTime(&ft2, &dwFlags, szLastSync, ARRAYSIZE(szLastSync));
- }
- if (VT_I4 == vars[spDownloadSize].vt)
- {
- StrFormatByteSize(vars[spDownloadSize].lVal * 1024,
- szDownloadSize, ARRAYSIZE(szDownloadSize));
- }
- if (VT_BSTR == vars[spDownloadResult].vt)
- {
- #ifdef UNICODE
- wnsprintf(szDownloadResult, ARRAYSIZE(szDownloadResult),
- TEXT("%s"), vars[spDownloadResult].bstrVal);
- #else
- wnsprintf(szDownloadResult, ARRAYSIZE(szDownloadResult),
- TEXT("%S"), vars[spDownloadResult].bstrVal);
- #endif
- }
- for (int i = 0; i < ARRAYSIZE(pProps); i++)
- {
- VariantClear(&vars[i]);
- }
- }
- psi->Release();
- }
- }
- SetDlgItemText(hdlg, IDC_LAST_SYNC, szLastSync);
- SetDlgItemText(hdlg, IDC_DOWNLOAD_SIZE, szDownloadSize);
- SetDlgItemText(hdlg, IDC_DOWNLOAD_RESULT, szDownloadResult);
- }
- for (int i = 0; i < ARRAYSIZE(offSumIDs); i++)
- {
- ShowWindow(GetDlgItem(hdlg, offSumIDs[i]), bShow ? SW_SHOW : SW_HIDE);
- }
- }
- BOOL CPropertyPages::OnInitDialog(HWND hdlg)
- {
- TCHAR szName[MAX_PATH];
- HICON hicon = NULL;
- HRESULT hr;
- CIconHandler *pIconHandler = new CIconHandler;
- if (pIconHandler)
- {
- if (SUCCEEDED(pIconHandler->Load(m_szPath, 0)))
- {
- TCHAR szIconFile[MAX_PATH];
- int iIndex;
- UINT wFlags;
- if (SUCCEEDED(pIconHandler->GetIconLocation(0, szIconFile, ARRAYSIZE(szIconFile),
- &iIndex, &wFlags)))
- {
- HICON hiconScrap = NULL;
- hr = pIconHandler->Extract(szIconFile, iIndex, &hicon, &hiconScrap,
- MAKELONG(GetSystemMetrics(SM_CXICON),
- GetSystemMetrics(SM_CXSMICON)));
- if (S_FALSE == hr)
- {
- // Do it ourselves
- hicon = ExtractIcon(g_hinst, szIconFile, iIndex);
- }
- else if ((NULL != hiconScrap) && (hicon != hiconScrap))
- {
- // Otherwise cleanup unwanted little icon
- DestroyIcon(hiconScrap);
- }
- }
- }
- pIconHandler->Release();
- }
- if (NULL == hicon)
- {
- hicon = LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_CHANNEL));
- }
- BOOL bEnableMakeOffline = TRUE;
- SendDlgItemMessage(hdlg, IDC_ICONEX2, STM_SETICON, (WPARAM)hicon, 0);
- StrCpyN(szName, m_szPath, ARRAYSIZE(szName));
- PathStripPath(szName);
- SetDlgItemText(hdlg, IDC_NAME, szName);
- SetDlgItemText(hdlg, IDC_URL, m_szURL);
- TCHAR szVisits[256];
- szVisits[0] = 0;
- CCdfView* pCCdfView = new CCdfView;
- if (pCCdfView)
- {
- hr = pCCdfView->Load(m_szURL, 0);
- if (SUCCEEDED(hr))
- {
- IXMLDocument* pIXMLDocument;
- hr = pCCdfView->ParseCdf(NULL, &pIXMLDocument, PARSE_LOCAL);
- if (SUCCEEDED(hr))
- {
- IXMLElement* pIXMLElement;
- LONG nIndex;
- hr = XML_GetFirstChannelElement(pIXMLDocument,
- &pIXMLElement, &nIndex);
- if (SUCCEEDED(hr))
- {
- BSTR bstrURL = XML_GetAttribute(pIXMLElement, XML_HREF);
- if (bstrURL && *bstrURL)
- {
- BYTE cei[MAX_CACHE_ENTRY_INFO_SIZE];
- LPINTERNET_CACHE_ENTRY_INFO pcei = (LPINTERNET_CACHE_ENTRY_INFO)cei;
- DWORD cbcei = MAX_CACHE_ENTRY_INFO_SIZE;
- if (GetUrlCacheEntryInfoW(bstrURL, pcei, &cbcei))
- {
- wnsprintf(szVisits, ARRAYSIZE(szVisits), TEXT("%d"),
- pcei->dwHitRate);
- }
- }
- SysFreeString(bstrURL);
- pIXMLElement->Release();
- }
- pIXMLDocument->Release();
- }
- }
- pCCdfView->Release();
- }
- if (0 == szVisits[0])
- {
- MLLoadString(IDS_VALUE_UNKNOWN, szVisits,
- ARRAYSIZE(szVisits));
- }
- SetDlgItemText(hdlg, IDC_VISITS, szVisits);
- /*
- SendDlgItemMessage(hdlg, IDC_HOTKEY, HKM_SETRULES,
- (HKCOMB_NONE | HKCOMB_A | HKCOMB_C | HKCOMB_S),
- (HOTKEYF_CONTROL | HOTKEYF_ALT));
- SendDlgItemMessage(hdlg, IDC_HOTKEY, HKM_SETHOTKEY, m_wHotkey, 0);
- */
- WCHAR wszURL[INTERNET_MAX_URL_LENGTH];
- SHTCharToUnicode(m_szURL, wszURL, ARRAYSIZE(wszURL));
- CheckDlgButton(hdlg, IDC_MAKE_OFFLINE, m_bStartSubscribed ? 1 : 0);
- if (m_bStartSubscribed)
- {
- if (SHRestricted2(REST_NoRemovingSubscriptions, m_szURL, 0))
- {
- bEnableMakeOffline = FALSE;
- }
- }
- else
- {
- if (SHRestricted2(REST_NoAddingSubscriptions, m_szURL, 0))
- {
- bEnableMakeOffline = FALSE;
- }
- }
- if (!CanSubscribe(wszURL))
- {
- bEnableMakeOffline = FALSE;
- }
- if (!bEnableMakeOffline)
- {
- EnableWindow(GetDlgItem(hdlg, IDC_MAKE_OFFLINE), FALSE);
- }
- ShowOfflineSummary(hdlg, m_bStartSubscribed);
- return TRUE;
- }
- BOOL AddSubsPropsCallback(HPROPSHEETPAGE hpage, LPARAM lParam)
- {
- return (bool) PropSheet_AddPage((HWND)lParam, hpage);
- }
- void CPropertyPages::AddRemoveSubsPages(HWND hdlg, BOOL bAdd)
- {
- ASSERT(NULL != m_pSubscriptionMgr2);
- if (NULL != m_pSubscriptionMgr2)
- {
- if (bAdd)
- {
- IShellPropSheetExt *pspse;
- if (SUCCEEDED(m_pSubscriptionMgr2->QueryInterface(IID_IShellPropSheetExt,
- (void **)&pspse)))
- {
- pspse->AddPages(AddSubsPropsCallback, (LPARAM)GetParent(hdlg));
- pspse->Release();
- }
- }
- else
- {
- ISubscriptionMgrPriv *psmp;
- if (SUCCEEDED(m_pSubscriptionMgr2->QueryInterface(IID_ISubscriptionMgrPriv,
- (void **)&psmp)))
- {
- psmp->RemovePages(GetParent(hdlg));
- psmp->Release();
- }
- }
- ShowOfflineSummary(hdlg, bAdd);
- }
- }
- BOOL CPropertyPages::OnCommand(HWND hdlg, WORD wNotifyCode, WORD wID, HWND hwndCtl)
- {
- BOOL bHandled = TRUE;
- switch (wID)
- {
- case IDC_MAKE_OFFLINE:
- if (wNotifyCode == BN_CLICKED)
- {
- AddRemoveSubsPages(hdlg, IsDlgButtonChecked(hdlg, IDC_MAKE_OFFLINE));
- PropSheet_Changed(GetParent(hdlg), hdlg);
- }
- break;
- /*
- case IDC_HOTKEY:
- if (wNotifyCode == EN_CHANGE)
- {
- PropSheet_Changed(GetParent(hdlg), hdlg);
- }
- break;
- */
- default:
- bHandled = FALSE;
- break;
- }
- return bHandled;
- }
- BOOL CPropertyPages::OnNotify(HWND hdlg, WPARAM idCtrl, LPNMHDR pnmh)
- {
- BOOL bHandled = FALSE;
- switch (pnmh->code)
- {
- case PSN_APPLY:
- {
- /*
- TCHAR szHotkey[32];
- TCHAR szDesktopINI[MAX_PATH];
- WORD wOldHotkey = m_wHotkey;
- m_wHotkey = (WORD)SendDlgItemMessage(hdlg, IDC_HOTKEY, HKM_GETHOTKEY, 0, 0);
- wnsprintf(szHotkey, ARRAYSIZE(szHotkey), TEXT("%d"), m_wHotkey);
- PathCombine(szDesktopINI, m_szPath, c_szDesktopINI);
- WritePrivateProfileString(c_szChannel, c_szHotkey, szHotkey, szDesktopINI);
- RegisterGlobalHotkey(wOldHotkey, m_wHotkey, m_szPath);
- */
- BOOL bIsSubscribed = IsDlgButtonChecked(hdlg, IDC_MAKE_OFFLINE);
- if (!bIsSubscribed)
- {
- WCHAR wszURL[INTERNET_MAX_URL_LENGTH];
- SHTCharToUnicode(m_szURL, wszURL, ARRAYSIZE(wszURL));
- if (NULL != m_pSubscriptionMgr2)
- {
- m_pSubscriptionMgr2->DeleteSubscription(wszURL, NULL);
- }
- }
- else
- {
- ISubscriptionMgrPriv *psmp;
- if ((NULL != m_pSubscriptionMgr2) &&
- SUCCEEDED(m_pSubscriptionMgr2->QueryInterface(IID_ISubscriptionMgrPriv,
- (void **)&psmp)))
- {
- psmp->SaveSubscription();
- psmp->Release();
- }
- }
- bHandled = TRUE;
- break;
- }
- }
- return bHandled;
- }
- void CPropertyPages::OnDestroy(HWND hdlg)
- {
- if (!m_bStartSubscribed &&
- IsDlgButtonChecked(hdlg, IDC_MAKE_OFFLINE) &&
- (NULL != m_pSubscriptionMgr2))
- {
- WCHAR wszURL[INTERNET_MAX_URL_LENGTH];
- SHTCharToUnicode(m_szURL, wszURL, ARRAYSIZE(wszURL));
- m_pSubscriptionMgr2->UpdateSubscription(wszURL);
- }
- // Ensure sys bit is still set
- SetFileAttributes(m_szPath, FILE_ATTRIBUTE_SYSTEM);
- }
- UINT CPropertyPages::PropSheetCallback(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
- {
- switch (uMsg)
- {
- case PSPCB_RELEASE:
- if (NULL != ppsp->lParam)
- {
- ((CPropertyPages *)ppsp->lParam)->Release();
- }
- break;
- }
- return 1;
- }
- TCHAR c_szHelpFile[] = TEXT("iexplore.hlp");
- DWORD aHelpIDs[] = {
- IDC_NAME, IDH_SUBPROPS_SUBTAB_SUBSCRIBED_NAME,
- IDC_URL_TEXT, IDH_SUBPROPS_SUBTAB_SUBSCRIBED_URL,
- IDC_URL, IDH_SUBPROPS_SUBTAB_SUBSCRIBED_URL,
- // IDC_HOTKEY_TEXT, IDH_WEBDOC_HOTKEY,
- // IDC_HOTKEY, IDH_WEBDOC_HOTKEY,
- IDC_VISITS_TEXT, IDH_WEBDOC_VISITS,
- IDC_VISITS, IDH_WEBDOC_VISITS,
- IDC_MAKE_OFFLINE, IDH_MAKE_AVAIL_OFFLINE,
- IDC_SUMMARY, IDH_GROUPBOX,
- IDC_LAST_SYNC_TEXT, IDH_SUBPROPS_SUBTAB_LAST,
- IDC_LAST_SYNC, IDH_SUBPROPS_SUBTAB_LAST,
- IDC_DOWNLOAD_SIZE_TEXT, IDH_SUBPROPS_DLSIZE,
- IDC_DOWNLOAD_SIZE, IDH_SUBPROPS_DLSIZE,
- IDC_DOWNLOAD_RESULT_TEXT, IDH_SUBPROPS_SUBTAB_RESULT,
- IDC_DOWNLOAD_RESULT, IDH_SUBPROPS_SUBTAB_RESULT,
- 0, 0
- };
- INT_PTR CPropertyPages::PropSheetDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- INT_PTR lrHandled = FALSE;
- CPropertyPages *pThis;
- switch (msg)
- {
- case WM_INITDIALOG:
- {
- LPPROPSHEETPAGE pPropSheetPage = (LPPROPSHEETPAGE)lParam;
- ASSERT(NULL != pPropSheetPage);
- if (NULL != pPropSheetPage)
- {
- SetWindowLongPtr(hdlg, DWLP_USER, pPropSheetPage->lParam);
- }
- pThis = GetThis(hdlg);
- if (NULL != pThis)
- {
- lrHandled = pThis->OnInitDialog(hdlg);
- }
- break;
- }
- case WM_COMMAND:
- pThis = GetThis(hdlg);
- if (NULL != pThis)
- {
- lrHandled = pThis->OnCommand(hdlg, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
- }
- break;
- case WM_NOTIFY:
- pThis = GetThis(hdlg);
- if (NULL != pThis)
- {
- lrHandled = pThis->OnNotify(hdlg, wParam, (LPNMHDR)lParam);
- }
- break;
- case WM_DESTROY:
- pThis = GetThis(hdlg);
- if (NULL != pThis)
- {
- pThis->OnDestroy(hdlg);
- }
- break;
- case WM_HELP:
- SHWinHelpOnDemandWrap((HWND)((LPHELPINFO) lParam)->hItemHandle, c_szHelpFile,
- HELP_WM_HELP, (DWORD_PTR) aHelpIDs);
- lrHandled = TRUE;
- break;
- case WM_CONTEXTMENU:
- SHWinHelpOnDemandWrap((HWND)wParam, c_szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)aHelpIDs);
- lrHandled = TRUE;
- break;
- }
- return lrHandled;
- }