void MyGraphSeries::SetTipRegion(int nGroup, CRgn* prgn) { VALIDATE; _ASSERTE(0 <= nGroup); ASSERT_VALID(prgn); // If there is an existing region, delete it. CRgn* prgnOld = NULL; if (nGroup < m_oaRegions.GetSize()) { prgnOld = m_oaRegions.GetAt(nGroup); ASSERT_NULL_OR_POINTER(prgnOld, CRgn); } if (prgnOld) { delete prgnOld; prgnOld = NULL; } // Add the new region. m_oaRegions.SetAtGrow(nGroup, prgn); _ASSERTE(m_oaRegions.GetSize() <= m_dwaValues.GetSize()); }
CPropsetPropExchange::CPropsetPropExchange(CPropertySection& psec, LPSTORAGE lpStorage, BOOL bLoading) : m_psec(psec), m_lpStorage(lpStorage), m_dwPropID(255) { ASSERT_POINTER(&psec, CPropertySection); ASSERT_NULL_OR_POINTER(lpStorage, IStorage); m_bLoading = bLoading; }
// Returns which group (if any) the sent point lies within in this series. int MyGraphSeries::HitTest(const CPoint& pt, int searchStart = 0) const { VALIDATE; for (int nGroup = searchStart; nGroup < m_oaRegions.GetSize(); ++nGroup) { CRgn* prgnData = m_oaRegions.GetAt(nGroup); ASSERT_NULL_OR_POINTER(prgnData, CRgn); if (prgnData && prgnData->PtInRegion(pt)) { return nGroup; } } return -1; }
BOOL CPropsetPropExchange::ExchangePersistentProp(LPCTSTR pszPropName, LPUNKNOWN* ppUnk, REFIID iid, LPUNKNOWN pUnkDefault) { ASSERT(AfxIsValidString(pszPropName)); ASSERT_POINTER(ppUnk, LPUNKNOWN); ASSERT_NULL_OR_POINTER(pUnkDefault, IUnknown); BOOL bSuccess = FALSE; if (m_bLoading) { RELEASE(*ppUnk); *ppUnk = NULL; DWORD vtType; LPSTREAM pstm = _AfxLoadStreamFromPropset(m_psec, pszPropName, vtType); if (pstm != NULL) { CLSID clsid; switch(vtType) { case VT_BLOB: if (_AfxPeekAtClassIDInStream(pstm, &clsid)) { if (IsEqualCLSID(clsid, CLSID_StdPicture) || IsEqualCLSID(clsid, _afx_CLSID_StdPicture_V1)) { // Special case: load the picture directly. bSuccess = SUCCEEDED(::ReadClassStm(pstm, &clsid)) && SUCCEEDED(::OleLoadPicture(pstm, 0, FALSE, iid, (LPVOID*)ppUnk)); } else { // Load the object. bSuccess = SUCCEEDED(::OleLoadFromStream(pstm, iid, (LPVOID*)ppUnk)); } } break; case VT_BLOB_PROPSET: *ppUnk = _AfxCreateObjectFromStreamedPropset(pstm, iid); break; default: break; } pstm->Release(); } if (!bSuccess && (pUnkDefault != NULL)) { bSuccess = SUCCEEDED(pUnkDefault->QueryInterface(iid, (LPVOID*)ppUnk)); } } else { if ((*ppUnk == NULL) || _AfxIsSameUnknownObject(iid, *ppUnk, pUnkDefault)) { bSuccess = TRUE; } else { ++m_dwPropID; bSuccess = m_psec.SetName(m_dwPropID, pszPropName) && _AfxSaveObjectInPropset(*ppUnk, m_psec, m_dwPropID); } } return bSuccess; }
BOOL CPropsetPropExchange::ExchangeFontProp(LPCTSTR pszPropName, CFontHolder& font, const FONTDESC* pFontDesc, LPFONTDISP pFontDispAmbient) { ASSERT(AfxIsValidString(pszPropName)); ASSERT_POINTER(&font, CFontHolder); ASSERT_NULL_OR_POINTER(pFontDesc, FONTDESC); ASSERT_NULL_OR_POINTER(pFontDispAmbient, IFontDisp); BOOL bSuccess = FALSE; if (m_bLoading) { DWORD vtType; LPSTREAM pstm = _AfxLoadStreamFromPropset(m_psec, pszPropName, vtType); if (pstm != NULL) { LPFONT pFont; switch(vtType) { case VT_BLOB: pFont = _AfxCreateFontFromStream(pstm); break; case VT_BLOB_PROPSET: pFont = (LPFONT)_AfxCreateObjectFromStreamedPropset(pstm, IID_IFont); break; default: pFont = NULL; } if (pFont != NULL) { font.SetFont(pFont); bSuccess = TRUE; } pstm->Release(); } if (!bSuccess) { // Initialize font to its default state font.InitializeFont(pFontDesc, pFontDispAmbient); } } else { if ((font.m_pFont == NULL) || _AfxIsSameFont(font, pFontDesc, pFontDispAmbient)) { bSuccess = TRUE; } else { ++m_dwPropID; bSuccess = m_psec.SetName(m_dwPropID, pszPropName) && _AfxSaveObjectInPropset(font.m_pFont, m_psec, m_dwPropID); } } return bSuccess; }