STDMETHODIMP wxIDataObject::EnumFormatEtc(DWORD dwDir, IEnumFORMATETC **ppenumFormatEtc) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::EnumFormatEtc")); wxDataObject::Direction dir = dwDir == DATADIR_GET ? wxDataObject::Get : wxDataObject::Set; // format count is total of user specified and system formats. const size_t ourFormatCount = m_pDataObject->GetFormatCount(dir); const size_t sysFormatCount = m_systemData.size(); const ULONG nFormatCount = wx_truncate_cast(ULONG, ourFormatCount + sysFormatCount); // fill format array with formats ... wxScopedArray<wxDataFormat> formats(nFormatCount); // ... from content data (supported formats) m_pDataObject->GetAllFormats(formats.get(), dir); // ... from system data for ( size_t j = 0; j < sysFormatCount; j++ ) { SystemDataEntry* entry = m_systemData[j]; wxDataFormat& format = formats[ourFormatCount + j]; format = entry->pformatetc->cfFormat; } wxIEnumFORMATETC *pEnum = new wxIEnumFORMATETC(formats.get(), nFormatCount); pEnum->AddRef(); *ppenumFormatEtc = pEnum; return S_OK; }