12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316 |
- #ifndef __PropertyPageImpl_h_
- #define __PropertyPageImpl_h_
- #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"
- template <class T>
- inline UINT Checked_true(T bExp)
- {
- return bExp ? BST_CHECKED : BST_UNCHECKED;
- }
- template <class T>
- inline UINT Checked_false(T bExp)
- {
- return Checked_true(!bExp);
- }
- inline VARIANT_BOOL VARIANT_TRUE_Checked(UINT nCheck)
- {
- return (nCheck == BST_CHECKED) ? VARIANT_TRUE : VARIANT_FALSE;
- }
- inline VARIANT_BOOL VARIANT_TRUE_Unchecked(UINT nCheck)
- {
- return (nCheck == BST_UNCHECKED) ? VARIANT_TRUE : VARIANT_FALSE;
- }
- #define COM_INTERFACE_ENTRIES_TCPropertyPageImpl() \
- COM_INTERFACE_ENTRY_IMPL(IPropertyPage) \
- COM_INTERFACE_ENTRY(IPropertyPageSite) \
- COM_INTERFACE_ENTRY(ITCPropertyFieldToggle) \
- COM_INTERFACE_ENTRY(IPropertyNotifySink)
- #define CHAIN_MSG_MAP_TCPropertyPageImpl() \
- CHAIN_MSG_MAP(TCPropertyPageImplBase)
- #include <CodecDriver.h>
- template <class T>
- class ATL_NO_VTABLE TCPropertyPageImpl :
- public IPropertyPageImpl<T>,
- public IPropertyPageSite,
- public IPropertyNotifySink,
- public CDialogImpl<T>,
- public TCPropertyPageBase,
- public IDispatchImpl<ITCPropertyFieldToggle, &IID_ITCPropertyFieldToggle, &LIBID_TCCodecDriver>
- {
- public:
- typedef TCPropertyPageImpl<T> TCPropertyPageImplBase;
- typedef TCPropertyPageImpl<T> Type;
- typedef void (Type::*XFieldUpdateProc)(ULONG, IUnknown**);
- typedef void (Type::*XFieldApplyProc)(ULONG, IUnknown**);
- typedef void (Type::*XFieldUpdateProcEx)(UINT, DISPID, REFIID, ULONG, IUnknown**);
- typedef void (Type::*XFieldApplyProcEx)(UINT, DISPID, REFIID, ULONG, IUnknown**);
-
-
- struct XPageFieldEntry
- {
- UINT idCtrl;
- DISPID dispid;
- const IID* piid;
- XFieldUpdateProc pfnUpdate;
- XFieldApplyProc pfnApply;
- XFieldUpdateProcEx pfnUpdateEx;
- XFieldApplyProcEx pfnApplyEx;
- };
- public:
-
- enum EMessages
- {
- wm_OnChanged = WM_APP,
- };
- public:
- BEGIN_MSG_MAP(TCPropertyPageImpl<T>)
- MESSAGE_HANDLER(wm_OnChanged, OnChangedHandler)
- MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialogHandler)
- MESSAGE_HANDLER(WM_NCDESTROY, OnNcDestroyHandler)
-
- CHAIN_MSG_MAP(IPropertyPageImpl<T>)
- END_MSG_MAP()
- public:
- TCPropertyPageImpl();
- virtual ~TCPropertyPageImpl();
- public:
- void SetDirty(BOOL bDirty);
- void SetDirtyNoApply();
- protected:
- #ifdef _DEBUG
- virtual LPCSTR TypeName()
- {
- return TCTypeName(T);
- }
- #endif
- protected:
- virtual HWND GetPageWindow();
- virtual IUnknown* GetPageUnknown();
- virtual bool IsObjectKnown(IUnknown* punk);
- virtual void UpdateFields(DISPID dispid = DISPID_UNKNOWN);
- public:
- HWND Create(HWND hWndParent);
- void OnApplyFields();
- bool OnUpdateFields(DISPID dispid = DISPID_UNKNOWN);
- UINT GetPageFieldTable(const XPageFieldEntry** ppTable);
- public:
- LRESULT OnSetDirty(WORD, WORD, HWND, BOOL& bHandled);
- LRESULT OnSetDirtyNoApply(WORD, WORD, HWND, BOOL& bHandled);
- LRESULT OnInitDialogHandler(UINT, WPARAM, LPARAM, BOOL&);
- public:
- STDMETHODIMP GetPageInfo(PROPPAGEINFO *pPageInfo);
- STDMETHODIMP SetObjects(ULONG cObjects, IUnknown** ppUnk);
- STDMETHODIMP Apply();
- STDMETHODIMP Help(LPCOLESTR pszHelpDir);
- public:
- STDMETHODIMP OnStatusChange(DWORD dwFlags);
- STDMETHODIMP GetLocaleID(LCID* pLocaleID);
- STDMETHODIMP GetPageContainer(IUnknown** ppUnk);
- STDMETHODIMP TranslateAccelerator(MSG* pMsg);
- public:
- STDMETHODIMP OnChanged(DISPID dispID);
- STDMETHODIMP OnRequestEdit(DISPID dispID);
- public:
- STDMETHODIMP put_EnableField(DISPID dispid, VARIANT_BOOL bEnable);
- STDMETHODIMP get_EnableField(DISPID dispid, VARIANT_BOOL* pbEnable);
- STDMETHODIMP put_ShowField(DISPID dispid, VARIANT_BOOL bShow);
- STDMETHODIMP get_ShowField(DISPID dispid, VARIANT_BOOL* pbShow);
- protected:
- void FieldToggle(DISPID dispid, bool bEnableDisable, bool bToggle);
- bool GetFieldToggle(DISPID dispid, bool bEnableDisable);
- public:
- enum {IDD};
- public:
- WORD m_IDD;
- };
- template <class T>
- TCPropertyPageImpl<T>::TCPropertyPageImpl() :
- m_IDD(T::IDD)
- {
- _TRACE1("TCPropertyPageImpl<%hs>::TCPropertyPageImpl()\n", TCTypeName(T));
-
- T* pThis = static_cast<T*>(this);
-
- const XPageFieldEntry* pTable = NULL;
- UINT nEntries = pThis->GetPageFieldTable(&pTable);
-
- for (UINT i = 0; i < nEntries; ++i)
- {
- CUnkVectorMap::value_type value(*pTable[i].piid, CUnkVector());
- m_mapInterfaces.insert(value);
- }
- }
- template <class T>
- TCPropertyPageImpl<T>::~TCPropertyPageImpl()
- {
- _TRACE1("TCPropertyPageImpl<%hs>::~TCPropertyPageImpl()\n", TCTypeName(T));
- }
- template <class T>
- inline void TCPropertyPageImpl<T>::SetDirty(BOOL bDirty)
- {
-
- if (m_bUpdating)
- return;
-
- T* pThis = static_cast<T*>(this);
-
- bool bDirtyPrev = !!pThis->m_bDirty;
-
- pThis->m_bDirty = bDirty;
-
- if (!bDirtyPrev && bDirty)
- pThis->m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY |
- PROPPAGESTATUS_VALIDATE);
- }
- template <class T>
- inline void TCPropertyPageImpl<T>::SetDirtyNoApply()
- {
-
- if (m_bUpdating)
- return;
-
- T* pThis = static_cast<T*>(this);
-
- bool bDirtyPrev = !!pThis->m_bDirty;
-
- pThis->m_bDirty = true;
-
- if (!bDirtyPrev)
- pThis->m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
- }
- template <class T>
- HWND TCPropertyPageImpl<T>::Create(HWND hWndParent)
- {
-
- T* pThis = static_cast<T*>(this);
- assert(pThis->m_hWnd == NULL);
- _Module.AddCreateWndData(&pThis->m_thunk.cd, (CDialogImplBase*)pThis);
- HWND hWnd = ::CreateDialogParam(_Module.GetResourceInstance(),
- MAKEINTRESOURCE(pThis->m_IDD),
- hWndParent,
- (DLGPROC)StartDialogProc,
- NULL);
- assert(pThis->m_hWnd == hWnd);
- return hWnd;
- }
- template <class T>
- HWND TCPropertyPageImpl<T>::GetPageWindow()
- {
-
- T* pThis = static_cast<T*>(this);
- return *pThis;
- }
- template <class T>
- IUnknown* TCPropertyPageImpl<T>::GetPageUnknown()
- {
-
- T* pThis = static_cast<T*>(this);
- return pThis->GetUnknown();
- }
- template <class T>
- inline bool TCPropertyPageImpl<T>::IsObjectKnown(IUnknown* punk)
- {
-
- T* pThis = static_cast<T*>(this);
-
- const XPageFieldEntry* pTable = NULL;
- UINT nEntries = pThis->GetPageFieldTable(&pTable);
-
- typedef std::set<const IID*> CIIDSet;
- CIIDSet setPIID;
- bool bKnown = false;
- for (UINT i = 0; i < nEntries; ++i)
- {
-
- const XPageFieldEntry& entry = pTable[i];
-
- if (setPIID.end() == setPIID.find(entry.piid))
- {
-
- IUnknown* pqi;
- if (SUCCEEDED(punk->QueryInterface(*entry.piid, (void**)&pqi)))
- {
- assert(pqi);
- bKnown = true;
-
- CUnkVectorMap::iterator it = m_mapInterfaces.find(*entry.piid);
- assert(m_mapInterfaces.end() != it);
- CUnkVector& vec = it->second;
- vec.push_back(pqi);
- }
-
- setPIID.insert(entry.piid);
- }
- }
- return bKnown;
- }
- template <class T>
- void TCPropertyPageImpl<T>::UpdateFields(DISPID dispid)
- {
-
- T* pThis = static_cast<T*>(this);
-
- m_bUpdating = true;
- __try
- {
- if (!pThis->OnUpdateFields(dispid))
- OnUpdateFields(dispid);
- }
- __except(1)
- {
- _TRACE1("TCPropertyPageImpl<%hs>::UpdateFields(): Error! Unhandled exception caught!\n",
- TCTypeName(T));
- }
- m_bUpdating = false;
- }
- template <class T>
- bool TCPropertyPageImpl<T>::OnUpdateFields(DISPID dispid)
- {
-
- T* pThis = static_cast<T*>(this);
-
- const XPageFieldEntry* pTable = NULL;
- UINT nEntries = pThis->GetPageFieldTable(&pTable);
-
- for (UINT i = 0; i < nEntries; ++i)
- {
-
- const XPageFieldEntry& entry = pTable[i];
- if (DISPID_UNKNOWN == dispid || entry.dispid == dispid || !entry.dispid)
- {
-
- if (NULL != entry.pfnUpdate || NULL != entry.pfnUpdateEx)
- {
-
- CUnkVectorMap::iterator it = m_mapInterfaces.find(*entry.piid);
- CUnkVector& vec = it->second;
- assert(m_mapInterfaces.end() != it);
-
- __try
- {
- if (NULL != entry.pfnUpdateEx)
- (pThis->*entry.pfnUpdateEx)(entry.idCtrl, dispid, *entry.piid,
- vec.size(), vec.begin());
- else
- (pThis->*entry.pfnUpdate)(vec.size(), vec.begin());
- }
- __except(1)
- {
- LPCSTR pszClass = TCTypeName(T);
- _TRACE_BEGIN
- _TRACE_PART1("TCPropertyPageImpl<%hs>::OnUpdateFields(): ", pszClass);
- _TRACE_PART0("Error! Unhandled exception caught!\n");
- _TRACE_END
- }
- }
- }
- }
-
- return true;
- }
- template <class T>
- inline void TCPropertyPageImpl<T>::OnApplyFields()
- {
-
- T* pThis = static_cast<T*>(this);
-
- const XPageFieldEntry* pTable = NULL;
- UINT nEntries = pThis->GetPageFieldTable(&pTable);
-
- for (UINT i = 0; i < nEntries; ++i)
- {
-
- const XPageFieldEntry& entry = pTable[i];
-
- if (NULL != entry.pfnApply || NULL != entry.pfnApplyEx)
- {
-
- CUnkVectorMap::iterator it = m_mapInterfaces.find(*entry.piid);
- CUnkVector& vec = it->second;
- assert(m_mapInterfaces.end() != it);
-
- __try
- {
- if (NULL != entry.pfnApplyEx)
- (pThis->*entry.pfnApplyEx)(entry.idCtrl, entry.dispid,
- *entry.piid, vec.size(), vec.begin());
- else
- (pThis->*entry.pfnApply)(vec.size(), vec.begin());
- }
- __except(1
- {
- _TRACE_BEGIN
- _TRACE_PART1("TCPropertyPageImpl<%hs>::", TCTypeName(T));
- _TRACE_PART0("OnApplyFields(): Error! Unhandled exception caught!\n");
- _TRACE_END
- }
- }
- }
- }
- template <class T>
- inline UINT TCPropertyPageImpl<T>::GetPageFieldTable(
- const TCPropertyPageImpl<T>::XPageFieldEntry** ppTable)
- {
-
- if (ppTable)
- *ppTable = NULL;
- return 0;
- }
- template <class T>
- LRESULT TCPropertyPageImpl<T>::OnSetDirty(WORD, WORD, HWND,
- BOOL& bHandled)
- {
-
- T* pThis = static_cast<T*>(this);
-
- pThis->SetDirty(TRUE);
-
- bHandled = FALSE;
- return 0;
- }
- template <class T>
- LRESULT TCPropertyPageImpl<T>::OnSetDirtyNoApply(WORD, WORD, HWND,
- BOOL& bHandled)
- {
-
- T* pThis = static_cast<T*>(this);
-
- pThis->SetDirtyNoApply();
-
- bHandled = FALSE;
- return 0;
- }
- template <class T>
- LRESULT TCPropertyPageImpl<T>::OnInitDialogHandler(UINT, WPARAM,
- LPARAM, BOOL&)
- {
- _TRACE1("TCPropertyPageImpl<%hs>::OnInitDialogHandler()\n", TCTypeName(T));
-
- TCPropertyPageBase::OnInitDialogHandler(m_nObjects, m_ppUnk);
-
- return FALSE;
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::GetPageInfo(PROPPAGEINFO *pPageInfo)
- {
- _TRACE1("TCPropertyPageImpl<%hs>::GetPageInfo\n", TCTypeName(T));
- if (pPageInfo == NULL)
- {
- _TRACE0("Error : PROPPAGEINFO passed == NULL\n");
- return E_POINTER;
- }
-
- T* pThis = static_cast<T*>(this);
- HRSRC hRsrc = FindResource(_Module.GetResourceInstance(),
- MAKEINTRESOURCE(pThis->m_IDD), RT_DIALOG);
- if (hRsrc == NULL)
- {
- _TRACE0("Could not find resource template\n");
- return E_UNEXPECTED;
- }
- HGLOBAL hGlob = LoadResource(_Module.GetResourceInstance(), hRsrc);
- DLGTEMPLATE* pTemp = (DLGTEMPLATE*)LockResource(hGlob);
- if (pTemp == NULL)
- {
- _TRACE0("Could not load resource template\n");
- return E_UNEXPECTED;
- }
- GetDialogSize(pTemp, &pThis->m_size);
- pPageInfo->cb = sizeof(PROPPAGEINFO);
- pPageInfo->pszTitle = LoadStringHelper(pThis->m_dwTitleID);
- pPageInfo->size = pThis->m_size;
- pPageInfo->pszHelpFile = LoadStringHelper(pThis->m_dwHelpFileID);
- pPageInfo->pszDocString = LoadStringHelper(pThis->m_dwDocStringID);
- pPageInfo->dwHelpContext = pThis->m_dwHelpContext;
- return S_OK;
- }
- template <class T> STDMETHODIMP
- TCPropertyPageImpl<T>::SetObjects(ULONG cObjects, IUnknown** ppUnk)
- {
-
- return
- TCPropertyPageBase::SetObjects(m_nObjects, m_ppUnk, cObjects, ppUnk);
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::Apply()
- {
-
- T* pThis = static_cast<T*>(this);
-
- RETURN_FAILED(ApplyToInsidePages());
- __try
- {
-
-
-
- pThis->OnApplyFields();
-
- pThis->SetDirty(FALSE);
-
- return S_OK;
- }
- __except(1)
- {
- _TRACE1("TCPropertyPageImpl<%hs>::Apply(): Error! Unhandled exception caught!\n",
- TCTypeName(T));
- return RPC_E_SERVERFAULT;
- }
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::Help(LPCOLESTR pszHelpDir)
- {
- _TRACE2("TCPropertyPageImpl<%hs>::Help(\"%ls\")\n",
- TCTypeName(T), pszHelpDir);
- return E_NOTIMPL;
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::OnStatusChange(DWORD dwFlags)
- {
-
- if ((PROPPAGESTATUS_DIRTY | PROPPAGESTATUS_VALIDATE) & dwFlags)
- {
-
- T* pThis = static_cast<T*>(this);
-
- if (PROPPAGESTATUS_VALIDATE & dwFlags)
- pThis->SetDirty(TRUE);
- else
- pThis->SetDirtyNoApply();
- return S_OK;
- }
-
- assert(NULL != m_pPageSite);
- return m_pPageSite->OnStatusChange(dwFlags);
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::GetLocaleID(LCID* pLocaleID)
- {
-
- assert(NULL != m_pPageSite);
- return m_pPageSite->GetLocaleID(pLocaleID);
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::GetPageContainer(IUnknown** ppUnk)
- {
-
- assert(NULL != m_pPageSite);
- return m_pPageSite->GetPageContainer(ppUnk);
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::TranslateAccelerator(MSG* pMsg)
- {
-
- assert(NULL != m_pPageSite);
- return m_pPageSite->TranslateAccelerator(pMsg);
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::OnChanged(DISPID dispid)
- {
-
- T* pThis = static_cast<T*>(this);
-
- assert((HWND)*pThis);
-
- pThis->PostMessage(wm_OnChanged, dispid);
-
- return S_OK;
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::OnRequestEdit(DISPID dispid)
- {
-
-
- return S_OK;
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::put_EnableField(DISPID dispid, VARIANT_BOOL bEnable)
- {
-
- T* pThis = static_cast<T*>(this);
-
- pThis->FieldToggle(dispid, true, !!bEnable);
-
- return S_OK;
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::get_EnableField(DISPID dispid, VARIANT_BOOL* pbEnable)
- {
-
- T* pThis = static_cast<T*>(this);
-
- *pbEnable = pThis->GetFieldToggle(dispid, true);
-
- return S_OK;
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::put_ShowField(DISPID dispid, VARIANT_BOOL bShow)
- {
-
- T* pThis = static_cast<T*>(this);
-
- pThis->FieldToggle(dispid, false, !!bShow);
-
- return S_OK;
- }
- template <class T>
- STDMETHODIMP TCPropertyPageImpl<T>::get_ShowField(DISPID dispid, VARIANT_BOOL* pbShow)
- {
-
- T* pThis = static_cast<T*>(this);
-
- *pbShow = pThis->GetFieldToggle(dispid, false);
-
- return S_OK;
- }
- template <class T>
- void TCPropertyPageImpl<T>::FieldToggle(DISPID dispid, bool bEnableDisable, bool bToggle)
- {
-
- T* pThis = static_cast<T*>(this);
-
- const XPageFieldEntry* pTable = NULL;
- UINT nEntries = pThis->GetPageFieldTable(&pTable);
-
- for (UINT i = 0; i < nEntries; ++i)
- {
-
- const XPageFieldEntry& entry = pTable[i];
- if (entry.dispid == dispid)
- {
-
- HWND hwnd = GetDlgItem(entry.idCtrl);
- if (hwnd)
- {
- if (bEnableDisable)
- ::EnableWindow(hwnd, bToggle);
- else
- ::ShowWindow(hwnd, bToggle ? SW_SHOW : SW_HIDE);
- }
- }
- }
- }
- template <class T>
- bool TCPropertyPageImpl<T>::GetFieldToggle(DISPID dispid, bool bEnableDisable)
- {
-
- T* pThis = static_cast<T*>(this);
-
- const XPageFieldEntry* pTable = NULL;
- UINT nEntries = pThis->GetPageFieldTable(&pTable);
-
- for (UINT i = 0; i < nEntries; ++i)
- {
-
- const XPageFieldEntry& entry = pTable[i];
- if (entry.dispid == dispid)
- {
-
- HWND hwnd = GetDlgItem(entry.idCtrl);
- if (hwnd)
- {
- if (bEnableDisable)
- return !!::IsWindowEnabled(hwnd);
- else
- return !!::IsWindowVisible(hwnd);
- }
- }
- }
- return true;
- }
- #endif
|