123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569 |
- #pragma warning(disable: 4786)
- #include <vector>
- #include <map>
- #include <set>
- #include <comdef.h>
- #include <typeinfo.h>
- #include "..\TCLib\AdviseHolder.h"
- #include "InsidePropPage.h"
- #include "PageEntry.h"
- #include "PropertyPageBase.h"
- TCPropertyPageBase::TCPropertyPageBase() :
- m_iTable(0),
- m_bInitializing(true),
- m_bUpdating(true)
- {
- }
- TCPropertyPageBase::~TCPropertyPageBase()
- {
-
- ReleaseObjectsForInsidePages();
-
- ReleaseSupportedInterfaces();
- }
- TCInsidePropPage* TCPropertyPageBase::GetInsidePage(UINT idCtrl)
- {
-
- XInsidePage* pPage = _GetInsidePage(idCtrl);
- if (!pPage)
- return pPage;
-
- assert(pPage->m_hWnd);
- return pPage;
- }
- DWORD TCPropertyPageBase::GetInsidePageData(UINT idCtrl)
- {
-
- XInsidePage* pPage = _GetInsidePage(idCtrl);
-
- return pPage ? pPage->m_pEntry->dwData : 0;
- }
- LPCTSTR TCPropertyPageBase::GetInsidePageText(UINT idCtrl)
- {
-
- XInsidePage* pPage = _GetInsidePage(idCtrl);
-
- return pPage ? pPage->m_pEntry->pszText : NULL;
- }
- bool TCPropertyPageBase::GetDirtyInsidePage(UINT idCtrl)
- {
- TCInsidePropPage* pPage = GetInsidePage(idCtrl);
- return pPage ? pPage->Page_IsDirty() : false;
- }
- void TCPropertyPageBase::SetDirtyInsidePage(UINT idCtrl, bool bDirty)
- {
- TCInsidePropPage* pPage = GetInsidePage(idCtrl);
- if (pPage)
- pPage->SetDirty(bDirty);
- }
- TCInsidePropPage* TCPropertyPageBase::GetInsidePageOfGroup(UINT idGroup,
- DWORD dw)
- {
-
- XInsidePage* pPage = _GetInsidePageOfGroup(idGroup, dw);
- if (!pPage)
- return pPage;
-
- assert(pPage->m_hWnd);
- return pPage;
- }
- LPCTSTR TCPropertyPageBase::GetInsidePageOfGroupText(UINT idGroup, DWORD dw)
- {
-
- XInsidePage* pPage = _GetInsidePageOfGroup(idGroup, dw);
- if (!pPage)
- return NULL;
-
- return pPage->m_pEntry->pszText;
- }
- bool TCPropertyPageBase::GetDirtyInsidePageOfGroup(UINT idGroup, DWORD dw)
- {
- TCInsidePropPage* pPage = GetInsidePageOfGroup(idGroup, dw);
- return pPage ? pPage->Page_IsDirty() : false;
- }
- void TCPropertyPageBase::SetDirtyInsidePageOfGroup(UINT idGroup,
- DWORD dw, bool bDirty)
- {
- TCInsidePropPage* pPage = GetInsidePageOfGroup(idGroup, dw);
- if (pPage)
- pPage->SetDirty(bDirty);
- }
- TCInsidePropPage* TCPropertyPageBase::GetVisiblePageOfGroup(UINT idGroup)
- {
-
- CPageGroupIterator itGroup = m_mapPageGroups.find(idGroup);
- if (m_mapPageGroups.end() == itGroup)
- return NULL;
-
- CPageMap* pmap = itGroup->second;
- for (CPageIterator it = pmap->begin(); it != pmap->end(); ++it)
- {
- XInsidePage* pPage = it->second;
- if (IsWindow(*pPage) && pPage->IsWindowVisible())
- return pPage;
- }
-
- return NULL;
- }
- bool TCPropertyPageBase::ShowInsidePage(UINT idCtrl)
- {
- TCInsidePropPage* pPage = GetInsidePage(idCtrl);
- return pPage ? (IsWindow(*pPage) && pPage->ShowWindow(SW_SHOW)) : false;
- }
- bool TCPropertyPageBase::HideInsidePage(UINT idCtrl)
- {
- TCInsidePropPage* pPage = GetInsidePage(idCtrl);
- return pPage ? (IsWindow(*pPage) && pPage->ShowWindow(SW_HIDE)) : false;
- }
- bool TCPropertyPageBase::ShowInsidePageOfGroup(UINT idGroup, DWORD dw)
- {
-
- CPageGroupIterator itGroup = m_mapPageGroups.find(idGroup);
- if (m_mapPageGroups.end() == itGroup)
- return false;
-
- CPageMap* pmap = itGroup->second;
- CPageIterator itPage = pmap->find(dw);
- if (pmap->end() == itPage)
- return false;
-
- TCDeferWindowPosHandle hdwp = ::BeginDeferWindowPos(2);
- UINT uFlags = SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER;
-
- for (CPageIterator it = pmap->begin(); it != pmap->end(); ++it)
- {
- XInsidePage* pPage = it->second;
- if (IsWindow(*pPage) && pPage->IsWindowVisible())
- {
- if (itPage != it)
- ::DeferWindowPos(hdwp, *pPage, NULL, 0, 0, 0, 0,
- uFlags | SWP_HIDEWINDOW);
- break;
- }
- }
-
- if (itPage != it)
- {
-
- XInsidePage* pPage = itPage->second;
- if (pPage->m_hWnd || CreateInsidePage(pPage, true))
- ::DeferWindowPos(hdwp, *pPage, HWND_TOP, 0, 0, 0, 0,
- uFlags | SWP_SHOWWINDOW);
- }
-
- return true;
- }
- bool TCPropertyPageBase::HideInsidePageOfGroup(UINT idGroup, DWORD dw)
- {
-
- XInsidePage* pPage = _GetInsidePageOfGroup(idGroup, dw);
- if (!pPage)
- return false;
-
- if (IsWindow(*pPage))
- pPage->ShowWindow(SW_HIDE);
-
- return true;
- }
- bool TCPropertyPageBase::OnInitDialog()
- {
-
- return false;
- }
- UINT TCPropertyPageBase::GetInsidePageTable(
- const XInsidePageEntry** ppTable, UINT iTable)
- {
- UNUSED(iTable);
-
- if (ppTable)
- *ppTable = NULL;
- return 0;
- }
- void TCPropertyPageBase::OnSetAllAdvises(ULONG cObjects, IUnknown** ppUnk)
- {
- UNUSED(cObjects);
- UNUSED(ppUnk);
- }
- void TCPropertyPageBase::OnClearAllAdvises()
- {
- }
- bool TCPropertyPageBase::CreateInsidePage(XInsidePage* pPage, bool bOfGroup)
- {
-
- HWND hwndFocus = GetFocus();
-
- HRESULT hr = SetObjectsToInsidePage(pPage);
- bool bCreated = pPage->Create(GetPageWindow(),
- IPropertyPageSitePtr(GetPageUnknown()), pPage->m_pEntry->idPosCtrl,
- *pPage->m_pEntry->pclsid, pPage->m_pEntry->bVisible,
- pPage->m_pEntry->bSizeToCtrl, !bOfGroup);
- #ifdef _DEBUG
- if (!bCreated)
- {
- char sz1[64], sz3[64];
- sprintf(sz1, "TCPropertyPageImpl<%hs>::CreateInsidePage", TypeName());
- LPCSTR sz2 = "Failed to create child property page ";
- if (!bOfGroup)
- sprintf(sz3, "with control id 0x%08X.", pPage->m_pEntry->idPosCtrl);
- else
- sprintf(sz3, "in page group 0x%08X with DWORD value 0x%08X.",
- pPage->m_pEntry->idPosCtrl, pPage->m_pEntry->dwData);
- _TRACE3("%hs%hs%hs\n", sz1, sz2, sz3);
- assert(bCreated);
- }
- #endif
-
- SetFocus(hwndFocus);
- return bCreated;
- }
- void TCPropertyPageBase::CreateInsidePages()
- {
-
- const XInsidePageEntry* pEntries = NULL;
- UINT nCount = GetInsidePageTable(&pEntries, m_iTable);
- if (!nCount)
- return;
-
- for (UINT i = 0; i < nCount; i++)
- {
-
- const XInsidePageEntry& entry = pEntries[i];
- UINT idCtrl = entry.idPosCtrl;
-
- CPageIterator it = m_mapPages.find(idCtrl);
- if (m_mapPages.end() == it)
- {
-
- CPageGroupIterator itGroup = m_mapPageGroups.find(idCtrl);
- if (m_mapPageGroups.end() == itGroup)
- {
-
- XInsidePage* pPage = new XInsidePage(&entry);
- CPageMap::value_type value(idCtrl, pPage);
- m_mapPages.insert(value);
- }
- else
- {
-
- CPageMap* pmap = itGroup->second;
-
- DWORD dw = entry.dwData;
- XInsidePage* pPage = new XInsidePage(&entry);
- CPageMap::value_type value(dw, pPage);
- bool bInserted = pmap->insert(value).second;
- if (!bInserted)
- {
- delete pPage;
- #ifdef _DEBUG
- char sz[_MAX_PATH];
- sprintf(sz, "TCPropertyPageImpl<%hs>::CreateInsidePages(): "
- "More than one entry\n\tin page group 0x%08X, was specified "
- "with a DWORD value of 0x%08x.\n\tDuplicate is being ignored.",
- TypeName(), idCtrl, dw);
- _TRACE1("%hs\n", sz);
- assert(bInserted);
- #endif
- }
- }
- }
- else
- {
-
- CPageMap* pPageMap = new CPageMap;
- CPageGroupMap::value_type valuePageMap(idCtrl, pPageMap);
- m_mapPageGroups.insert(valuePageMap);
-
- XInsidePage* pPage = it->second;
- CPageMap::value_type valuePage(pPage->m_pEntry->dwData, pPage);
- pPageMap->insert(valuePage);
- m_mapPages.erase(it);
-
- --i;
- }
- }
-
- for (CPageIterator it = m_mapPages.begin(); it != m_mapPages.end(); ++it)
- {
- XInsidePage* pPage = it->second;
- const XInsidePageEntry& entry = *pPage->m_pEntry;
- if (entry.bVisible)
- CreateInsidePage(pPage, false);
- }
-
- CPageGroupIterator itGroup = m_mapPageGroups.begin();
- for (; itGroup != m_mapPageGroups.end(); ++itGroup)
- {
- #ifdef _DEBUG
- bool bOneIsVisible = false;
- #endif
-
- CPageMap* pmap = itGroup->second;
- for (CPageIterator it = pmap->begin(); it != pmap->end(); ++it)
- {
- XInsidePage* pPage = it->second;
- const XInsidePageEntry& entry = *pPage->m_pEntry;
- if (entry.bVisible)
- {
- #ifdef _DEBUG
- if (bOneIsVisible)
- {
- char sz[_MAX_PATH];
- sprintf(sz, "TCPropertyPageImpl<%hs>::CreateInsidePages(): "
- "More than one entry\n\tin page group 0x%08X was specified"
- "with a bVisible value of true.\n\tOnly the first one has"
- "been created.", TypeName(), entry.idPosCtrl);
- _TRACE1("%hs\n", sz);
- assert(!bOneIsVisible);
- }
- #endif
- if (CreateInsidePage(pPage, true))
- {
- #ifdef _DEBUG
- bOneIsVisible = true;
- #else
- break;
- #endif
- }
- }
- }
- }
- }
- void TCPropertyPageBase::DestroyInsidePages()
- {
-
- DestroyInsidePageMap(&m_mapPages);
-
- CPageGroupIterator it;
- for (it = m_mapPageGroups.begin(); it != m_mapPageGroups.end(); ++it)
- {
- CPageMap* pmap = it->second;
- DestroyInsidePageMap(pmap);
- delete pmap;
- }
-
- m_mapPageGroups.clear();
- }
- void TCPropertyPageBase::DestroyInsidePageMap(
- TCPropertyPageBase::CPageMap* pmap)
- {
-
- for (CPageIterator it = pmap->begin(); it != pmap->end(); ++it)
- {
-
- XInsidePage* pPage = it->second;
-
- assert(!IsWindow(*pPage));
-
- delete pPage;
- }
-
- pmap->clear();
- }
- XInsidePage* TCPropertyPageBase::_GetInsidePage(UINT idCtrl)
- {
-
- CPageIterator it = m_mapPages.find(idCtrl);
- if (m_mapPages.end() == it)
- return NULL;
-
- XInsidePage* pPage = it->second;
- if (!pPage->m_hWnd)
- return CreateInsidePage(pPage, false) ? pPage : NULL;
- return pPage;
- }
- XInsidePage* TCPropertyPageBase::_GetInsidePageOfGroup(UINT idGroup,
- DWORD dw)
- {
-
- CPageGroupIterator itGroup = m_mapPageGroups.find(idGroup);
- if (m_mapPageGroups.end() == itGroup)
- return NULL;
-
- CPageMap* pmap = itGroup->second;
- CPageIterator it = pmap->find(dw);
- if (pmap->end() == it)
- return NULL;
-
- XInsidePage* pPage = it->second;
- return pPage;
- }
- HRESULT TCPropertyPageBase::SetObjects(ULONG& cObjectsDest,
- IUnknown**& ppUnkDest, ULONG cObjects, IUnknown** ppUnk)
- {
-
- HRESULT hr = S_OK;
- CUnkVector pVec = NULL;
- __try
- {
-
- if (SUCCEEDED(hr = SetObjectsOfInsidePages(cObjects, ppUnk)))
- {
-
- ReleaseSupportedInterfaces();
- CUnkVector& vec = *(pVec = new CUnkVector);
- for (ULONG i = 0; i < cObjects; i++)
- if (ppUnk[i] && IsObjectKnown(ppUnk[i]))
- vec.push_back(ppUnk[i]);
-
- for (UINT iObj = 0; iObj < cObjectsDest; ++iObj)
- ppUnkDest[iObj]->Release();
- if (ppUnkDest != NULL)
- {
- delete [] ppUnkDest;
- ppUnkDest = NULL;
- cObjectsDest = 0;
- }
- assert(0 == cObjectsDest);
-
- if (vec.size())
- {
- ATLTRY(ppUnkDest = new IUnknown*[vec.size()]);
- if (NULL == ppUnkDest)
- hr = E_OUTOFMEMORY;
- else
- {
- for (i = 0; i < vec.size(); ++i)
- (ppUnkDest[i] = vec[i])->AddRef();
- cObjectsDest = vec.size();
- }
- }
-
- if (SUCCEEDED(hr) && ::IsWindow(GetPageWindow()))
- {
-
- UpdateFields();
- SetAllAdvises(cObjectsDest, ppUnkDest);
- }
- }
- }
- __except(1)
- {
- _TRACE1(
- "TCPropertyPageBase[%hs]::SetObjects(): Unknown Exception Caught!\n",
- TypeName());
-
- ClearAllAdvises();
-
- ReleaseObjectsForInsidePages();
-
- ReleaseSupportedInterfaces();
- for (UINT iObj = 0; iObj < cObjectsDest; ++iObj)
- ppUnkDest[iObj]->Release();
- if (ppUnkDest != NULL)
- {
- delete [] ppUnkDest;
- ppUnkDest = NULL;
- cObjectsDest = 0;
- }
-
- if (::IsWindow(GetPageWindow()))
- UpdateFields();
-
- hr = RPC_E_SERVERFAULT;
- }
-
- if (pVec)
- delete pVec;
-
- return hr;
- }
- HRESULT TCPropertyPageBase::SetObjectsOfInsidePages(ULONG cObjects,
- IUnknown** ppUnk)
- {
-
- SaveObjectsForInsidePages(cObjects, ppUnk);
-
- for (CPageIterator it = m_mapPages.begin(); it != m_mapPages.end(); ++it)
- {
- XInsidePage* pPage = it->second;
- if (pPage->m_hWnd)
- RETURN_FAILED(pPage->SetObjects(cObjects, ppUnk));
- }
-
- CPageGroupIterator itGroup = m_mapPageGroups.begin();
- for (; itGroup != m_mapPageGroups.end(); ++itGroup)
- {
- CPageMap* pmap = itGroup->second;
- for (CPageIterator it = pmap->begin(); it != pmap->end(); ++it)
- {
- XInsidePage* pPage = it->second;
- if (pPage->m_hWnd)
- RETURN_FAILED(pPage->SetObjects(cObjects, ppUnk));
- }
- }
-
- return S_OK;
- }
- void TCPropertyPageBase::SaveObjectsForInsidePages(ULONG cObjects,
- IUnknown** ppUnk)
- {
-
- if (!GetInsidePageTable(NULL, m_iTable))
- return;
-
- ReleaseObjectsForInsidePages();
-
- m_vecForInsidePages.resize(cObjects, NULL);
- for (ULONG i = 0; i < cObjects; ++i)
- {
- IUnknown* punk = ppUnk[i];
- m_vecForInsidePages[i] = punk;
- if (punk)
- punk->AddRef();
- }
- }
- HRESULT TCPropertyPageBase::SetObjectsToInsidePage(TCInsidePropPage* pPage)
- {
- ULONG cObjects = m_vecForInsidePages.size();
- IUnknown** ppUnk = m_vecForInsidePages.begin();
- return pPage->SetObjects(cObjects, ppUnk);
- }
- HRESULT TCPropertyPageBase::ApplyToInsidePages()
- {
-
- for (CPageIterator it = m_mapPages.begin(); it != m_mapPages.end(); ++it)
- {
- XInsidePage* pPage = it->second;
- if ((IsWindow(*pPage) && pPage->IsWindowVisible())
- || pPage->m_pEntry->bAlwaysApply)
- RETURN_FAILED(pPage->Page_Apply());
- }
-
- CPageGroupIterator itGroup = m_mapPageGroups.begin();
- for (; itGroup != m_mapPageGroups.end(); ++itGroup)
- {
- CPageMap* pmap = itGroup->second;
- CPageIterator itVisible = pmap->end();
- for (CPageIterator it = pmap->begin(); it != pmap->end(); ++it)
- {
- XInsidePage* pPage = it->second;
- if (IsWindow(*pPage))
- {
- if (pPage->IsWindowVisible())
- itVisible = it;
- else if (pPage->m_pEntry->bAlwaysApply)
- RETURN_FAILED(pPage->Page_Apply());
- }
- }
- if (pmap->end() != itVisible)
- {
- XInsidePage* pPage = itVisible->second;
- RETURN_FAILED(pPage->Page_Apply());
- }
- }
-
- return S_OK;
- }
- void TCPropertyPageBase::ReleaseObjectsForInsidePages()
- {
- CUnkIterator it = m_vecForInsidePages.begin();
- for (; it != m_vecForInsidePages.end(); ++it)
- {
- IUnknown* punk = *it;
- if (punk)
- punk->Release();
- }
- m_vecForInsidePages.clear();
- }
- void TCPropertyPageBase::ReleaseSupportedInterfaces()
- {
- CUnkVectorMap::iterator it = m_mapInterfaces.begin();
- for (; m_mapInterfaces.end() != it; ++it)
- {
- CUnkVector& vec = it->second;
- for (CUnkIterator itUnk = vec.begin(); vec.end() != itUnk; ++itUnk)
- {
- IUnknown* punk = *itUnk;
- punk->Release();
- }
- vec.clear();
- }
- }
- void TCPropertyPageBase::SetAllAdvises(ULONG cObjects, IUnknown** ppUnk)
- {
-
- typedef std::set<IConnectionPointContainer*> CCPCSet;
- typedef CCPCSet::iterator CCPCSetIterator;
- CCPCSet setCPC;
-
- IUnknown* punkThis = GetPageUnknown();
- IUnknown** ppunkEnd = ppUnk + cObjects;
- for (IUnknown** it = ppUnk; it != ppunkEnd; ++it)
- {
- IConnectionPointContainer* pCPC = SetAdvises(*it, punkThis);
- if (NULL != pCPC)
- setCPC.insert(pCPC);
- }
-
- CAdviseIterator itAdv = m_mapAdvise.begin();
- while (itAdv != m_mapAdvise.end())
- {
-
- CCPCSetIterator itCPC = setCPC.find(itAdv->first);
- if (setCPC.end() == itCPC)
- itAdv = m_mapAdvise.erase(itAdv);
- else
- ++itAdv;
- }
-
- OnSetAllAdvises(cObjects, ppUnk);
- }
- IConnectionPointContainer* TCPropertyPageBase::SetAdvises(
- IUnknown* punk, IUnknown* punkThis)
- {
- IConnectionPointContainer* pResult = NULL;
- TCAdviseHolder pAdv = new TCAdviseHolder;
- __try
- {
-
- TCAdviseHolder& adv = *pAdv;
- hr = adv.FindConnectionPoint(punk, IID_IPropertyNotifySink)
- if (SUCCEEDED(hr))
- {
-
- if (m_mapAdvise.end() == m_mapAdvise.find(adv.GetCPC()))
- {
-
- if (SUCCEEDED(hr = adv.Advise(punkThis)))
- m_mapAdvise.insert(CAdviseMap::value_type(adv.GetCPC(), adv));
- }
-
- pResult = adv.GetCPC();
- }
- }
- __except(1)
- {
- _TRACE1("%hs: Caught an unknown exception\n", szFn);
- return NULL;
- }
-
- delete pAdv;
-
- return pResult;
- }
- void TCPropertyPageBase::OnInitDialogHandler(ULONG cObjects,
- IUnknown** ppUnk)
- {
-
- m_bInitializing = true;
-
- CreateInsidePages();
-
- if (!m_mapAdvise.size())
- SetAllAdvises(cObjects, ppUnk);
-
- bool bResult = OnInitDialog();
-
- UpdateFields();
-
- m_bInitializing = false;
- }
- LRESULT TCPropertyPageBase::OnChangedHandler(UINT, WPARAM wp, LPARAM, BOOL&)
- {
-
- DISPID dispid = DISPID(wp);
- _TRACE3("TCPropertyPageBase[%hs]::OnChangedHandler(): dispid = 0x%08X (%d)\n",
- TypeName(), dispid, dispid);
-
- UpdateFields(dispid);
-
- return 0;
- }
- LRESULT TCPropertyPageBase::OnNcDestroyHandler(UINT, WPARAM, LPARAM,
- BOOL& bHandled)
- {
- _TRACE1("TCPropertyPageBase[%hs]::OnNcDestroyHandler()\n", TypeName());
-
- ClearAllAdvises();
-
- DestroyInsidePages();
-
- return bHandled = FALSE;
- }
|